Namespaces
Variants

std:: weakly_incrementable

From cppreference.net
Iterator library
Iterator concepts
weakly_incrementable
(C++20)
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
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 < class I >

concept weakly_incrementable =
std:: movable < I > &&
requires ( I i ) {
typename std:: iter_difference_t < I > ;
requires /*is-signed-integer-like*/ < std:: iter_difference_t < I >> ;
{ ++ i } - > std:: same_as < I & > ; // 동등성 보존을 요구하지 않음
i ++ ; // 동등성 보존을 요구하지 않음

} ;
(C++20부터)

/*is-signed-integer-like*/ 의 정의에 대해서는 is-integer-like 를 참조하십시오.

이 개념은 전위 및 후위 증가 연산자로 증가시킬 수 있는 타입에 대한 요구사항을 명시하지만, 이러한 증가 연산이 반드시 equality-preserving 일 필요는 없으며, 타입 자체가 std::equality_comparable 일 필요도 없습니다.

std::weakly_incrementable 타입의 경우, a == b ++ a == ++ b 를 의미하지는 않습니다. 약증가 가능 타입에 대한 알고리즘은 단일 패스 알고리즘으로 구현되어야 합니다. 이러한 알고리즘들은 std::istream_iterator 를 통해 입력 데이터의 소스로 istream을 사용할 수 있습니다.

의미론적 요구사항

타입 I 의 객체 i 에 대해, I 가 다음의 모든 조건을 만족할 때에만 std::weakly_incrementable 를 모델합니다:

  • 표현식 ++ i i ++ 은 동일한 도메인을 가집니다.
  • 만약 i 가 증가 가능하다면, ++ i i ++ 모두 i 를 증가시킵니다.
  • 만약 i 가 증가 가능하다면, std:: addressof ( ++ i ) == std:: addressof ( i ) 입니다.

결함 보고서

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

DR 적용 대상 게시된 동작 올바른 동작
P2325R3 C++20 default_initializable 요구됨 요구되지 않음

참고 항목

weakly_incrementable 타입에 대한 증가 연산이 등식 보존 이며 해당 타입이 equality_comparable 임을 명시함
(concept)