std::reverse_iterator

std::reverse_iterator (역방향 반복자)

주어진 반복자의 방향을 뒤집는 반복자 어댑터예요. 기본 반복자는 최소 LegacyBidirectionalIterator이거나 C++20부터는 bidirectional_iterator를 모델링해야 해요. C++11부터 있어요.

출처: cppreference

본문

<iterator> 헤더에 정의돼 있어요.

template< class Iter >
class reverse_iterator;

std::reverse_iterator는 주어진 반복자의 방향을 뒤집는 반복자 어댑터예요. 기본 반복자는 최소 양방향이어야 해요. 즉 양방향 반복자가 주어지면 std::reverse_iterator는 기본 양방향 반복자가 정의하는 시퀀스의 끝에서 시작으로 이동하는 새 반복자를 만들어요. 반복자 i에서 만든 역방향 반복자 r에 대해 &*r == &*(i - 1) 관계가 항상 성립해요(r이 역참조 가능할 때). 그래서 one-past-the-end 반복자로 만든 역방향 반복자는 시퀀스의 마지막 요소를 역참조해요. 표준 라이브러리 컨테이너의 rbegin()·rend() 멤버가 돌려주는 반복자예요.

중첩 타입

타입 정의
iterator_type Iter
iterator_category std::iterator_traits<Iter>::iterator_category
value_type std::iterator_traits<Iter>::value_type
difference_type std::iterator_traits<Iter>::difference_type
pointer std::iterator_traits<Iter>::pointer
reference std::iterator_traits<Iter>::reference

C++20부터는 iterator_concept 등이 컨셉 기반으로 달라져요.

멤버 함수

  • (constructor) — 역방향 반복자를 생성해요(기본, 다른 reverse_iterator, 기본 반복자에서).
  • operator= — 내용을 할당해요.
  • base — 기본 반복자를 돌려줘요.
  • operator* — 현재 요소를 돌려줘요.
  • operator-> — 현재 요소를 가리켜요.
  • operator[] — 첨자 연산.
  • operator++, operator--, operator+, operator- 등 — 이동·산술.

예제

#include <iostream>
#include <iterator>
#include <vector>

int main()
{
    std::vector<int> v{1, 2, 3};
    for (auto it = v.rbegin(); it != v.rend(); ++it)
        std::cout << *it << ' '; // "3 2 1 "
}

더 알아보기 (Learn more)

cppreference