Namespaces
Variants

std:: sized_sentinel_for, std:: disable_sized_sentinel_for

From cppreference.net
Iterator library
Iterator concepts
sized_sentinel_for
(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 S, class I >

concept sized_sentinel_for =
std:: sentinel_for < S, I > &&
! std :: disable_sized_sentinel_for < std:: remove_cv_t < S > ,
std:: remove_cv_t < I >> &&
requires ( const I & i, const S & s ) {
{ s - i } - > std:: same_as < std:: iter_difference_t < I >> ;
{ i - s } - > std:: same_as < std:: iter_difference_t < I >> ;

} ;
(1) (C++20부터)
template < class S, class I >
inline constexpr bool disable_sized_sentinel_for = false ;
(2) (C++20부터)
1) sized_sentinel_for 개념은 반복자 타입 I 의 객체와 센티넬 타입 S 의 객체가 상수 시간 내에 그들 사이의 거리를 계산하기 위해 서로 뺄셈될 수 있음을 명시합니다.
2) disable_sized_sentinel_for 변수 템플릿은 서로 뺄셈이 가능하지만 실제로 sized_sentinel_for 개념을 충족하지 않는 반복자와 센티넬이 해당 개념을 만족하는 것을 방지하는 데 사용할 수 있습니다.
프로그램은 cv-unqualified 비배열 객체 타입 S I 에 대해 disable_sized_sentinel_for 를 특수화할 수 있으며, 이때 둘 중 적어도 하나는 프로그램 정의 타입 이어야 합니다. 이러한 특수화들은 상수 표현식 에서 사용 가능하며 const bool 타입을 가집니다.

목차

의미론적 요구사항

i I 타입의 반복자, s S 타입의 센티넬로 가정하고, [ i , s ) 가 범위를 나타낸다고 하자. n ++ i 를 적용하여 bool ( i == s ) true 가 되도록 하는 데 필요한 최소 적용 횟수라고 하자. I S sized_sentinel_for<S, I> 를 모델링하려면 다음 모든 조건이 충족되어야 한다:

동등성 보존

표준 라이브러리 개념의 requires expressions 에 선언된 표현식들은 equality-preserving 해야 합니다(다르게 명시된 경우를 제외하고).

암시적 표현 변형

상수 lvalue 피연산자에 대해 비수정적인 표현식을 사용하는 requires expression 암시적 표현식 변형 도 요구합니다.

참고 항목

범위가 자신의 크기를 상수 시간에 알 수 있음을 지정함
(concept)
범위의 크기와 같은 정수를 반환함
(customization point object)