STL 반복자
- 컨테이너에 저장돼있는 원소들을 공통적인 방법으로 하나씩 접근할 수 있게 함.
- 각 타입에 ::iterator 또는 ::const_iterator를 붙여주면 사용 가능하다.
- 포인터와 비슷하게 사용한다. (간접 참조 가능)
iterator와 const_iterator의 차이
- const_iterator 는 반복자가 가리키는 원소의 값을 변경하지 못한다.
STL 반복자 특징에 따른 범주
프로그램이 컨테이너로 데이터를 집어 넣는 것을 '출력'이라고 하고, 반대로 컨테이너에서 프로그램으로 데이터를 들고 오는 것을 데이터를 집어넣는 것을 '입력'이라고 한다. 즉, 아래의 코드처럼 생각하면 된다.
- 입력 반복자(input iterator): 현 위치의 원소를 한 번만 읽을 수 있는 반복자.
- Read 및 접근만 가능
- 증감은 ++ 연산만 가능
- 비교는 ==, != 연산만 가능
ex)istream
- 출력 반복자(output iterator): 현 위치의 원소를 한 번만 쓸 수 있는 반복자.
- Write 만 가능
- ++ 연산만 가능
- 비교 연산자 불가능
ex) ostream
- 순방향 반복자(forwawrd iterator): 입,출력 반복자 기능과 순방향으로 이동이 가능하고 재할당될 수 있는 반복자.
- 읽기 쓰기 접근 가능.
- 산술 연산 ++만 가능
- 비교 연산 ==, != 만 가능
- 양방향 반복자(bidirectional iterator): 순방향 반복자 기능과 역방향까지 이동이 가능한 반복자를 말한다.
- 읽기 쓰기 접근 다 가능.
- 산술 연산 ++, -- 가능
- 비교 연산 ==, != 만 가능
ex) list, set, multiset, map, multimap
- 임의 접근 반복자(random access iterator): 양방향 반복자 기능에 +, -, +=, -=, [] 연산까지 가능한 반복자
- 읽기 쓰기 접근 다 가능.
- 산술 연산 ++, --, +, -, +=, -= 가능
- 비교 연ㅅ산 ==, !=, >, <, >=, <= 가능
- 첨자 연산자([]) 사용 가능 ex) vector, deque
왜 반복자를 분류했나?
이러한 분류를 통해 컨테이너의 반복자가 포함된 범주만으로 해당 컨테이너에 적용가능한 알고리즘 함수들을 판별할 수 있기 때문이다.
출처
인터페이스