Iterator


iterator란 C++의 STL에서 여러 container들의 내부 요소를 순회하기 위한 공통 인터페이스다.

container의 종류에 따라서 랜덤 엑세스가 가능 안 할 수도 있고, 단일 연결리스트라면 전방으로 움직일 순 있어도 후방으로 그 포인터가 돌아갈 수는 없을 것이다.

이에 따라서 iterator에도 그 종류가 정해져 있다.

Categories


가장 좁은 기능을 하는 두 iteratorinputoutput이 있다. 이 기능을 보장해주며 순회가 가능한 forward iterator, 역행이 가능한 bidirectional iterator, 인덱스 기반 접근이 가능한 random access iterator로 구분된다.


Input, Output


Input

iterator가 가리키는 값을 읽을 수 있다. a==b, a!=b, *a, a->m 연산이 가능하다

Output

할당 연산이 가능하다 (const가 아니어야 한다.)

Forward


input과 output의 기능을 모두 지원해준다. a++ 연산자를 통해 다음으로 넘어갈 수 있다

단, ++를 활용하여 앞으로 이동하는 연산은 Input과 Output을 포함한 모든 iterator가 지원해준다.


Bidirectional


a-- 연산자를 통해서 ‘뒤’로 이동할 수 있다.

Random Access


  • iterator에 인덱스를 매길 수 있어 [] 연산자로 참조할 수 있다.
  • +,- 연산으로 여러 칸을 한 번에 이동할 수 있다.
  • <, >, <=, >= 대소 비교 연산이 가능하다.

Container - Iterator


  • input iterator
    • istream_iterator
  • output iterator
    • ostream_iterator, inserter, front_inserter, back_insterter
  • bidirectional_iterator
    • list, set, multiset, map, multimap
  • random_access_iterator
    • c-style pointer, vector, deque

Reference