Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

승쨩개발공부

[STL] 조건자 (algorithm) 본문

STL

[STL] 조건자 (algorithm)

Unknowns 2021. 12. 8. 17:23

조건자

-> 알고리즘 함수의 인자로 적용된다.

-> 오름차순 또는 내림차순, 탐색 기준 등 조건을 설정한다.

-> bool타입의 값을 반환하는 함수 포인터, 함수 객체를 사용한다.

 

 

조건자 만들기

조건자를 통해서 정렬을 시도하려면 알고리즘 함수가 필요하다.

알고리즘 함수를 사용하기 위해서는 #include <algorithm> 추가가 필요하다.

 

 

 

 

알고리즘 함수

 

##1. _Sort(#1, #2, #3)

-> 배열 기반 컨테이너에서만 작동한다.

#1 : 시작 위치를 가리키는 것. (반복자, 포인터)  == (begin)

#2 : 마지막 원소 다음 위치를 가리키는 것. (반복자, 포인터) == (end)

#3 : 조건자. == (조건자 함수)

그런데 C++에서는 조건자를 제공하는 _functional이라는 파일이 존재한다.

-> 단, 함수 객체로 제공해준다.

 

functional 역시 사용하기 위해서는 #include <functional> 추가가 필요하다.

결과값은 직접만든 조건자와 같다.

 

 

알고리즘 함수의 sort는 배열 기반 컨테이너만 사용이 가능하다. (노드 기반은 불가능)

-> 배열도 알고리즘 함수의 sort를 사용할 수 있다.

 

 

 

##2. count_if(#1, #2, #3)

-> 컨테이너를 순회하면서 조건자의 반환 값이 true일 때의 개수를 반환한다.

#1 : 시작 위치를 가리키는 것. (반복자, 포인터)  == (begin)

#2 : 마지막 원소 다음 위치를 가리키는 것. (반복자, 포인터) == (end)

#3 : 조건자. == (조건자 함수)

 

 

count_if를 통해 홀수의 개수를 반환

 

 

 

##3. for_each(#1, #2, #3)

-> 컨테이너의 원소를 순회하면서 단순 조건자를 수행한다.

-> 조건자의 반환 타입이 bool이 아니어도 상관없다.

-> 대표적으로 컨테이너 원소가 동적할당한 주소를 가질 경우 사용한다.(자주 사용함)

#1 : 시작 위치를 가리키는 것. (반복자, 포인터)  == (begin)

#2 : 마지막 원소 다음 위치를 가리키는 것. (반복자, 포인터) == (end)

#3 : 조건자. == (조건자 함수)

 

 

일반적인 방식으로 동적할당 해제

 

for_each()를 통한 동적할당해제

동적할당한 주소를 가진 원소를 삭제 하려고 할 떄,

동적할당 해제만 하게되면 컨테이너의 메모리는 남아있으므로 할당 해제 후에 clear()를 통해서

메모리도 같이 삭제 시켜줘야 한다.

'STL' 카테고리의 다른 글

[STL] list  (0) 2021.12.10
[STL] vector의 메모리정책, 생성자, reserve  (0) 2021.12.08
[STL] 반복자 (iterator)  (0) 2021.12.08
[STL] vector  (0) 2021.12.08
[STL] 컨테이너 종류  (0) 2021.12.07