Namespaces
Variants

C++ named requirements: LegacyInputIterator

From cppreference.net
C++ named requirements

LegacyInputIterator 는 가리키는 원소로부터 읽을 수 있는 LegacyIterator 입니다. LegacyInputIterator 는 단일 패스(single pass) 알고리즘에 대해서만 유효성을 보장합니다: LegacyInputIterator i 가 증가된 이후에는, 이전 값의 모든 복사본이 무효화될 수 있습니다.

목차

요구사항

유형 정의
X 입력 반복자 유형
T X 값 유형 (즉 std:: iterator_traits < X > :: value_type )
R std:: iterator_traits < X > :: reference
정의
i , j X 또는 const X 유형의 값들
r X& 유형의 값
기타 정의
m 데이터 멤버 또는 멤버 함수를 나타낼 수 있는 식별자


X 는 다음 조건들이 모두 충족될 때 LegacyInputIterator 를 만족합니다:

  • X LegacyIterator 요구 사항을 만족합니다.
  • X EqualityComparable 요구 사항을 만족합니다.
  • 다음 표현식들은 올바르게 구성되어 있으며 지정된 의미를 가집니다:
표현식 타입 의미론
i ! = j
BooleanTestable 을 만족하는 타입 (C++20 이전)
boolean-testable 을 모델링하는 타입 (C++20 이후)
사전 조건 i j 도메인 내에 있어야 함 == .
효과 다음 표현과 동등함: ! ( i == j ) .
* i R , T 로 변환 가능 사전 조건 i 역참조 가능 해야 함.
효과
  • 표현식 ( void ) * i, * i * i 와 동등함.
  • 만약 i j == 의 도메인 내에 있고 i == j 이면, * i * j 와 동등함.
i - > m 사전 조건 i 가 역참조 가능해야 함.
효과 다음 표현과 동등함: ( * i ) . m .
++ r X& 사전 조건 r 가 역참조 가능해야 함.
사후 조건
  • r 이 역참조 가능하거나 r 이 끝(past-the-end) 위치임.
  • r 의 이전 값의 모든 복사본은 더 이상 역참조 가능하거나 == 의 도메인 내에 있을 필요가 없음.
( void ) r ++ 효과 다음 표현과 동등함: ( void ) ++ r .
* r ++ T 로 변환 가능 효과 다음 표현과 동등함: T x = * r ; ++ r ; return x ; .

동등성 도메인

용어 the domain of == 는 일반적인 수학적 의미로 사용되어 == 를 사용하여 비교할 수 있는 값들의 집합을 나타냅니다. 이 집합은 시간에 따라 변할 수 있습니다.

각 알고리즘은 사용하는 반복자 값에 대한 동등성 영역에 추가 요구사항을 부과합니다. 이러한 요구사항은 알고리즘이 == ! = 를 사용하는 방식에서 추론할 수 있습니다.

참고 사항

입력 반복자 X LegacyForwardIterator 가 아닌 경우, std:: iterator_traits < X > :: reference 는 참조 타입일 필요가 없습니다: 입력 반복자를 역참조하면 프록시 객체나 std:: iterator_traits < X > :: value_type 자체를 값으로 반환할 수 있습니다 ( std::istreambuf_iterator 의 경우처럼).

Concept

std::iterator_traits 의 정의를 위해 다음의 설명 전용( exposition-only ) 개념이 정의됩니다.

template < class I >

concept __LegacyInputIterator =
__LegacyIterator < I > && std:: equality_comparable < I > && requires ( I i )
{
typename std:: incrementable_traits < I > :: difference_type ;
typename std:: indirectly_readable_traits < I > :: value_type ;
typename std:: common_reference_t < std:: iter_reference_t < I > && ,
typename std:: indirectly_readable_traits < I > :: value_type & > ;
* i ++ ;
typename std:: common_reference_t < decltype ( * i ++ ) && ,
typename std:: indirectly_readable_traits < I > :: value_type & > ;
requires std:: signed_integral < typename std:: incrementable_traits < I > :: difference_type > ;

} ;

여기서 설명 전용 개념 __LegacyIterator LegacyIterator 에 설명되어 있습니다.

(C++20부터)

결함 보고서

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

DR 적용 대상 게시된 동작 올바른 동작
LWG 98 C++98 * i ++ 의 반환 타입이 T 여야 했음 T 로 변환 가능한 모든 타입이 될 수 있음
LWG 2114
( P2167R3 )
C++98 bool 로의 변환 가능성이 구현의 기대를
반영하기에 너무 약했음
요구 사항이 강화됨

참고 항목

타입이 입력 반복자임을 지정합니다. 즉, 참조된 값을 읽을 수 있고 전위/후위 증가가 모두 가능함
(concept)
Iterator library 반복자, 반복자 특성, 어댑터 및 유틸리티 함수에 대한 정의를 제공함