Namespaces
Variants

std:: basic_const_iterator

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
basic_const_iterator
(C++23)
const_iterator
(C++23)
const_sentinel
(C++23)
make_const_iterator
(C++23)
make_const_sentinel
(C++23)

Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
헤더 파일에 정의됨 <iterator>
template < std:: input_iterator Iter >
class basic_const_iterator ;
(C++23부터)

std::basic_const_iterator 는 기반 반복자(최소한 LegacyInputIterator 또는 input_iterator 를 만족해야 함)와 정확히 동일하게 동작하는 반복자 어댑터입니다. 단, 역참조 시 기반 반복자가 반환하는 값을 불변 값으로 변환한다는 점이 다릅니다. std::basic_const_iterator 의 특수화는 상수 반복자입니다. 즉, 요소 수정이 허용되지 않으므로 이 반복자는 출력 반복자로 사용될 수 없습니다.

목차

멤버 타입

멤버 타입 정의
iterator_category
(조건부 존재)

Iter forward_iterator 를 모델링하는 경우:

그렇지 않은 경우, 멤버 iterator_category 는 존재하지 않습니다.

iterator_concept
value_type std:: iter_value_t < Iter >
difference_type std:: iter_difference_t < Iter >
reference (private) std:: iter_const_reference_t < Iter >
( 설명 전용 멤버 타입* )

멤버 객체

멤버 이름 정의
current (private) base() 가 복사하거나 이동하는 기반 반복자
( 설명 전용 멤버 객체* )

멤버 함수

새로운 basic_const_iterator 를 생성합니다
(public member function)
기본 반복자에 접근합니다
(public member function)
가리키는 요소에 접근합니다
(public member function)
인덱스로 요소에 접근합니다
(public member function)
반복자를 전진시키거나 후퇴시킵니다
(public member function)
기본 반복자가 변환 가능한 모든 상수 반복자로 변환합니다
(public member function)
기본 반복자들을 비교합니다
(public member function)

비멤버 함수

basic_const_iterator 와 non- basic_const_iterator 를 비교
(함수 템플릿)
반복자를 전진 또는 후진
(함수 템플릿)
(C++23)
두 반복자 어댑터 간의 거리를 계산
(함수 템플릿)
(C++23)
기본 반복자를 역참조한 결과를 해당 rvalue 참조 타입으로 캐스팅
(함수)

헬퍼 클래스

반복자와 적응된 basic_const_iterator 타입의 공통 타입을 결정함
(클래스 템플릿 특수화)

헬퍼 별칭 템플릿

template < std:: input_iterator I >
using const_iterator = /* 설명 참조 */ ;
(C++23 이후)

만약 I constant-iterator (표시 전용 개념)를 모델링하면, const_iterator < I > 는 타입 I 를 나타냅니다. 그렇지 않으면, basic_const_iterator < I > 입니다.

template < std:: semiregular S >
using const_sentinel = /* 설명 참조 */ ;
(C++23부터)

만약 S input_iterator 를 모델링하면, const_sentinel < S > const_iterator < S > 타입을 나타냅니다. 그렇지 않으면, S 입니다.

헬퍼 함수 템플릿

template < std:: input_iterator T >
constexpr const_iterator < T > make_const_iterator ( I it ) { return it ; }
(C++23부터)
template < std:: semiregular S >
constexpr const_sentinel < S > make_const_sentinel ( S s ) { return s ; }
(C++23부터)

참고 사항

기능 테스트 매크로 표준 기능
__cpp_lib_ranges_as_const 202207L (C++23) std::basic_const_iterator
202311L (C++23)
(DR)
std::basic_const_iterator 는 해당 기본 타입의 변환 가능성을 따라야 함

예제

#include <cassert>
#include <iterator>
#include <vector>
int main()
{
    std::vector v{1, 2, 3};
    std::vector<int>::iterator i = v.begin();
    *i = 4;   // OK, 이제 v[0] == 4
    i[1] = 4; // OK, *(i + 1) = 4; 와 동일
    auto ci = std::make_const_iterator(i);
    assert(*ci == 4);   // OK, 기본 객체를 읽을 수 있음
    assert(ci[0] == 4); // OK, 동일
    // *ci = 13;        // 오류: 위치가 읽기 전용임
    // ci[0] = 13;      // 오류: 동일
    ci.base()[0] = 42;  // OK, 기본 반복자는 쓰기 가능함
    assert(*ci == 42);  // OK, 기본 위치 v[0]이 수정됨
}

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
P2836R1 C++23 basic_const_iterator 가 기본 타입의 변환 가능성을 따르지 않음 변환 연산자 제공