
()를 오버로드한 클래스의 인스턴스가 펑터다.
입력 반복자: 현 위치의 원소를 한 번만 읽을 수 있는 반복자
출력 반복자: 현 위치의 원소를 한 번만 쓸 수 있는 반복자
순방향 반복자: 입/출력 반복자 기능에 순방향(++)으로 이동이 가능한 재할당될 수 있는 반복자
양방향 반복자: 순방향 반복자 기능에 역방향으로 이동(--)이 가능한 반복자
임의 접근 반복자: 양방향 반복자 기능에 +, -, +=, -=, [] 연산이 가능한 반복자.
양방향: 리스트, 셋, 멀티셋, 맵, 멀티맵
임의 접근: 벡터, 덱
알고리즘은 한 쌍의 반복자, [begin(), end())를 필요로 한다.
sort 알고리즘은 임의 접근 반복자를 요구하므로 벡터와 덱 외의 다른 컨테이너는 불가하다.
STL에서 펑터는 정의한 동작을 다른 구성 요소에 반영하려 할 때 사용된다.
sort(b, e, functor)는 sort(b, e)와 버전이 다른 알고리즘으로, 펑터를 정렬 기준으로 하여 정렬한다.
어댑터는 구성 요소의 인터페이스를 변경한다.
스택 컨테이너 어댑터는 일반 컨테이너를 스택 컨테이너로 변경한다. 디폴트 컨테이너는 덱이다.
대표적인 반복자 어댑터가 reverse_iterator이다. reverse_iterator는 일반 반복자의 동작 방식을 반대로 동작시키는 역방향 반복자로 변환한다.
모든 컨테이너는 자신의 역방향 반복자를 typedef로 정의하며 rbegin()과 rend() 멤버함수로 순차열의 시작과 끝 원소를 가리키는 반복자 쌍을 반환한다.
역방향 반복자가 가리키는 원소의 실제 값은 원소의 다음(++) 원소가 된다.
next_permutation()은 배열을 오름차순으로 정렬한 뒤 써야 한다. 새로운 순열이 이전 순열보다 사전순으로 큰 경우 true를 반환한다.
배열 기반 컨테이너(벡터, 덱, 배열)의 이터레이터는 (포인터처럼) 정수와의 연산 가능하다. 인덱스를 계산한다.
STL의 find는 목표를 못 찾을 시 end() 반환(또는 '배열명+크기' 반환)한다.
벡터는 앞쪽(왼쪽)이 막혀 있는 형태로, 뒤쪽에서만 추가/제거할 수 있다.
시퀀스 컨테이너는 요소들의 순서를 유지하므로, 시퀀스 컨테이너는 push_back()으로 값을 저장한 순서대로 요소를 저장하고, 이 순서대로 출력된다.
size()는 저장 원소의 개수, capacity()는 실제 할당된 메모리 크기, max_size()는 컨테이너가 담을 수 있는 최대 원소의 개수이다. capacity를 넘어서면 벡터는 공간을 재할당한다.
resize() 멤버함수를 사용하여 컨테이너의 size를 변경할 수 있다.
시퀀스 컨테이너는 삽입 위치(순서) 개념이 있으므로 모든 시퀀스 컨테이너 벡터, 리스트, 덱은 첫 번째와 마지막 원소를 참조하는 front(), back() 멤버함수를 제공한다. 참조이므로 원소 값을 수정할 수 있다.
모든 시퀀스 컨테이너는 assign() 멤버함수를 제공하여 값을 재할당할 수 있다.
insert() 멤버 함수는 반복자가 가리키는 위치에 원소를 추가할 수 있다. 여러 개의 원소를 한 번에 삽입할 수도 있으며, 반복자 쌍(구간)을 통째로 삽입할 수도 있다.
erase() 멤버 함수는 반복자가 가리키는 위치의 원소를 제거할 수 있다.
컨테이너 비교 연산은 문자열 비교처럼 원소를 하나씩 비교한다.
map은 레블트 기반이다.
m[k] = v : m 컨테이너에 원소(k, v)를 추가하거나 해당하는 원소의 value를 v로 갱신한다.
insert()를 제공하며, 기본 정렬 기준은 less이다.
map의 원소는 pair로 저장되며 pair 객체의 first 멤버변수는 key, second 멤버변수는 value이다.
map의 insert() 멤버함수는 저장한 원소의 위치를 가리키는 반복자와 삽입 성공 여부를 나타내는 bool 값을 pair 객체로 반환한다.