더북(TheBook)

역방향 랜덤 액세스 반복자도 표준 랜덤 액세스 반복자처럼 첨자 연산자를 사용할 수 있고, 반대 방향으로 동작한다. 표준 반복자 iter에서 iter[n]iter에서 n 위치인 곳에 있는 원소를 반환하고, *(iter + n)으로 표현한 것과 같다. 역방향 반복자 riter에서 riter[n]riter에서 n 위치 앞에 있는 곳에 있는 원소를 반환하고, *(riter + n)으로 표현한 것과 같다.

▲ 그림 1-3 컨테이너에서 반복자와 역방향 반복자의 동작

 

그림 1-3은 컨테이너에서 표준 반복자와 역방향 반복자가 동작하는 방식을 보여준다. 그림을 보면 컨테이너 원소에 대해서 역방향 반복자는 일반 반복자에서 하나 더 왼쪽에 있다는 걸 알 수 있다. 모든 역방향 반복자는 내부에 표준 반복자를 갖고 있지만, 살짝 바뀐 반복자여서 내부에 있는 표준 반복자가 역방향 반복자와 같은 원소를 가리키지 않는다. reverse_iterator 객체는 내부 반복자를 반환하는 base() 멤버 함수를 갖고 있으며, 내부 반복자는 표준 반복자로 역방향 반복자와는 반대로 동작한다. 내부 반복자(base iterator)는 역방향 반복자 riter가 가리키는 원소에서 오른쪽 한 칸을 위치로 가리킨다(그림 1-3). 컨테이너에는 역방향 반복자를 쓸 수 없는 멤버 함수도 있다. 역방향 반복자로 찾은 위치에 알고리즘을 적용해야 하는데 멤버 함수에 역방향 반복자를 쓸 수 없을 때 base()를 호출해 역방향 반복자에서 표준 반복자를 얻을 수 있다. 내부 반복자는 역방향 반복자로 확인한 원소에서 오른쪽 한 칸을 위치로 가리킨다는 사실에 주의해야 한다. 이에 대해서는 2장에서 자세히 설명하겠다.

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