승쨩개발공부
[STL] 조건자 (algorithm) 본문
조건자
-> 알고리즘 함수의 인자로 적용된다.
-> 오름차순 또는 내림차순, 탐색 기준 등 조건을 설정한다.
-> 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 |