더북(TheBook)

1.4.4.1 역방향 반복자

역방향 반복자는 표준 반복자의 반대로 동작한다. 양방향이나 랜덤 액세스 반복자의 역방향 버전을 만들 수 있다. 컨테이너의 멤버 함수 rbegin()rend()는 마지막 원소와 첫 번째 원소에서 하나 더 앞 위치를 가리킨다.** 이름이 같은 전역 함수 rbegin()rend()도 동작은 같다.

▲ 그림 1-2 역방향 반복자의 연산

 

역방향 반복자를 증가하거나 감소하면 원소들의 순서가 표준 반복자와 반대로 동작한다. rbegin 반복자를 증가하면 이전 원소(왼쪽으로 하나 이동)를 가리키고, rbegin 반복자를 감소하면 다음 원소(오른쪽으로 하나 이동)를 가리키게 된다. 그림 1-3은 표준 반복자와 역방향 반복자의 증가 방향을 비교한 것이다. 역방향 반복자 타입을 위한 템플릿은 반복자 템플릿을 상속해서 연산 함수들을 역방향 연산으로 오버로딩한 것이다. string 헤더에 정의된 문자열 클래스도 역방향 반복자를 이용할 수 있으므로 string 객체에서 rbegin() 멤버 함수를 호출해서 마지막 문자를 가리키는 역방향 반복자를 얻을 수 있고, rend() 멤버 함수를 호출해서 첫 번째 문자에서 하나 더 앞을 가리키는 역방향 반복자를 얻을 수 있다. 전역 함수 crbegin()crend() 함수를 호출하면 const 역방향 반복자를 반환한다.

** 역주

begin()은 첫 번째 원소를 가리키고, end()는 마지막 원소에서 하나 더 뒤(one past the last element)를 가리킨다. 역방향 반복자는 역순이므로 rbegin()은 마지막 원소를 가리키고, rend()는 첫 번째 원소에서 하나 더 앞(one before the first element)을 가리킨다. end() rend()가 가리키는 위치는 컨테이너 내부가 아니고 처리 대상에도 포함되지 않는다. 단순히 끝을 나타내는 표시(end marker)로만 쓰인다.

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