더북(TheBook)

반복자 카테고리는 다음과 같이 다섯 가지가 있으며 간단한 것부터 복잡한 순서로 정리했다.

1. 읽기 반복자는 객체에 대한 읽기 권한을 갖는다. Iter가 입력 반복자라면 iter가 가리키는 값에 대한 참조를 얻는 *iter를 반드시 지원해야 한다. 입력 반복자는 한 번만 읽을 수 있다. 즉, 한 번 반복자를 증가시키면 반복자가 가리켰던 이전 원소에 접근할 수 없으며 이전 원소에 접근하려면 새 반복자를 써야 한다. 순차열을 읽고 싶을 때마다 새 반복자를 생성해야 한다. 입력 반복자에서 할 수 있는 연산은 다음과 같다.

++iter, iter++, iter1 == iter2, iter1 != iter2, *iter

감소 연산자가 없는 것에 주의하자. 입력 반복자로는 iter->member 같은 표현식을 쓸 수 있다.

2. 출력 반복자는 객체에 대한 쓰기 권한을 갖는다. Iter가 출력 반복자라면 새로운 값을 할당할 수 있으므로 *iter = new_value라고 쓸 수 있다. 출력 반복자는 한 번만 쓸 수 있다. 즉, 순차열에 쓰기를 하고 싶을 때마다 새 반복자를 생성해야 한다. 출력 반복자에서 할 수 있는 연산은 다음과 같다.

++iter, iter++, *iter

감소 연산자가 없는 것에 주의하자. 출력 반복자로는 오직 쓰기 권한만 얻을 수 있다. 따라서 출력 반복자로는 iter->member 같은 표현식을 쓸 수 없다.

3. 순방향 반복자는 입력 반복자와 출력 반복자의 기능에 몇 번이고 쓸 수 있는 기능을 더한 것이다. 따라서 원소를 읽거나 쓰는 작업에 순방향 반복자를 몇 번이고 원하는 만큼 재사용할 수 있다. 수행하는 작업에 따라 순방향 반복자가 필요한지 결정된다. 예를 들어 범위를 검색해서 원소들을 대체하는 replace() 알고리즘을 사용하려면 대체할 원소를 가리키는 반복자가 원소를 덮어쓸 때도 재사용될 수 있어야 하므로 순방향 반복자가 필요하다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.