반복자는 컨테이너의 한 지점을 가리키는 객체이다. 반복자를 이용하면 알고리즘의 내부 코드에서 어떤 컨테이너이든지 상관없이 컨테이너의 요소에 접근할 수 있다. 반복자는 기능 별로 종류가 있다.
입력 반복자(InIt)
입력 반복자는 반복자가 가리키는 위치의 요소를 읽는 것만 가능하다.
a=*it; // 가능
*it=a; // 불가능
출력 반복자(OutIt)
요소의 내용을 변경할 수 있는 반복자이며 보통 읽기도 가능하지만 필수는 아니다.
*it=a; // 가능
a=*it; // 꼭 필요치 않음.
순방향 반복자(FwdIt)
입력, 출력이 모두 가능하고 ++it, it++를 통해 순방향으로 이동 가능하다.
양방향 반복자(BiIt)
순방향뿐만 아니라 --연산자로 역방향으로도 이동이 가능하다.
임의 접근 반복자(RanIt)
최상위 레벨의 반복자로 위 반복자들의 모든 기능을 포함하며 []연산자로 임의의 위치로 이동이 가능하다.
또한 반복자에 임의의 정수를 더하는 +n 연산을 제공한다.

삽입 반복자
기본으로 *it = value 하면 value가 반복자가 가리키는 위치에 덮어 쓰기 되는데 삽입 반복자에서는
반복자가 가리키는 위치에 삽입되고 필요한 만큼 컨테이너의 크기가 늘어난다.
insert_iterator<container>: insert 멤버 함수로 중간에 삽입한다. 모든 컨테이너에 사용 가능
insert_iterator<Container> inserter(Container& Cont,Iterator It) //템플릿
front_insert_iterator<container>: push_front로 선두에 삽입한다. 리스트, 데크에 사용 가능
front_insert_iterator<Container>front_inserter(Container& Cont) //템플릿
back_insert_iterator<container>: push_back로 끝에 삽입한다. 모든 컨테이너에 사용 가능
back_insert_iterator<Container>back_inserter(Container& Cont) //템플릿
상수 반복자
상수 반복자는 const_iterator 타입으로 정의되고 전후로 이동해 다른 요소를 가리키는 것은 가능하지만
요소의 값을 변경하는 것은 불가능하다. find처럼 값을 읽기만 하는 함수는 사용할 수 있지만
insert, erase, sort 처럼 값을 변경하는 함수는 사용할 수 없다.
역방향 반복자
reverse_iterator, const_reverse_iterator 상수, 비상수 버전이 따로 있다. 역방향 반복자는 rbegin부터 시작해서
rend까지 역방향 순회를 한다. 역방향 반복자에 1씩 더할 수록 반대로 순회한다. base 멤버 함수를 이용해서 순방향 반복자를 구할 수 있고 base는 역방향 반복자보다 하나 더 큰 값을 가진다. 역방향 반복자가 탐색하지 못한 곳부터 순방향으로 탐색하기 위해서다.
'C++' 카테고리의 다른 글
| [C++] 맵(map) (0) | 2022.01.11 |
|---|---|
| [C++] 셋(set) (0) | 2022.01.11 |
| [C++] 함수 객체 (0) | 2022.01.10 |
| [C++] auto_ptr (0) | 2022.01.09 |
| [C++] 네임 스페이스 (0) | 2022.01.08 |