[STL] 조건자 (algorithm)

[STL] 조건자 (algorithm)

조건자

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

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

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

조건자 만들기

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

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

알고리즘 함수

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

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

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

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

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

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

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

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

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

알고리즘 함수의 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()를 통해서

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

from http://enom01.tistory.com/54 by ccl(A) rewrite - 2021-12-08 17:26:38