std:: basic_const_iterator
|
헤더에 정의됨
<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
(조건부 존재) |
그렇지 않으면, 멤버
|
iterator_concept
|
|
value_type
|
std:: iter_value_t < Iter > |
difference_type
|
std:: iter_difference_t < Iter > |
reference
(비공개)
|
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)
|
두 반복자 어댑터 간의 거리 계산
(함수 템플릿) |
|
(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
가 기본 타입의 변환 가능성을 따르지 않음
|
변환 연산자 제공 |