std::basic_const_iterator

std::basic_const_iterator (상수 반복자 어댑터)

기본 반복자와 정확히 같게 동작하되, 역참조 시 기본 반복자가 돌려주는 값을 불변(immutable)으로 변환하는 반복자 어댑터예요. C++23부터 있어요.

출처: cppreference

본문

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

template< std::input_iterator Iter >
class basic_const_iterator;

std::basic_const_iterator는 기본 반복자(최소 LegacyInputIterator이거나 input_iterator를 모델링해야 함)와 정확히 같게 동작하되, 역참조 시 기본 반복자가 돌려주는 값을 불변으로 변환하는 반복자 어댑터예요. std::basic_const_iterator의 특수화는 상수 반복자예요. 즉 요소 수정이 허용되지 않아 출력 반복자로 절대 쓸 수 없어요.

멤버 타입

  • iterator_category (조건부 존재) — Iterforward_iterator를 모델링하면 std::iterator_traits<Iter>::iterator_category와 같은 타입. 아니면 존재하지 않음.
  • iterator_conceptItercontiguous_iteratorstd::contiguous_iterator_tag, random_access_iteratorstd::random_access_iterator_tag, 등등 기본 반복자의 컨셉 태그.

멤버 함수

  • (constructor) — 상수 반복자를 생성해요(기본 반복자, 적절한 value/reference 타입에서 변환).
  • base — 기본 반복자를 돌려줘요.
  • operator* — 역참조 결과를 불변 값으로 돌려줘요.
  • operator++, operator--, operator+= 등 — 기본 반복자와 동일한 이동·산술 연산.
  • operator[] — 불변 값에 대한 첨자 연산.

예제

#include <iterator>
#include <ranges>
#include <vector>
#include <concepts>

int main()
{
    std::vector<int> v{1, 2, 3};
    auto c = std::basic_const_iterator(v.begin());
    // *c 는 const int& 이므로 수정 불가
    static_assert(std::same_as<decltype(*c), int const&>);
}

더 알아보기 (Learn more)

cppreference