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 , требования концепта.
Программа может специализировать disable_sized_sentinel_for для cv-неквалифицированного не-массивного объектного типа S и I , при условии что хотя бы один из них является программо-определённым типом . Такие специализации могут использоваться в константных выражениях и имеют тип const bool .

Содержание

Семантические требования

Пусть i будет итератором типа I , а s - cентинелом типа S , таких что [ i , s ) обозначает диапазон. Пусть n будет наименьшим количеством применений ++ i , необходимых для того, чтобы bool ( i == s ) стало true . I и S моделируют sized_sentinel_for<S, I> только если выполняются все следующие условия:

  • Если n представимо в виде std:: iter_difference_t < I > , тогда s - i корректно определено и равно n .
  • Если - n представимо в виде std:: iter_difference_t < I > , тогда i - s корректно определено и равно - n .

Сохранение равенства

Выражения, объявленные в requires выражениях концепций стандартной библиотеки, должны быть equality-preserving (если не указано иное).

Вариации неявных выражений

Выражение requires expression , использующее выражение, которое является немодифицирующим для некоторого константного lvalue операнда, также требует неявных вариаций выражений .

Смотрите также

определяет, что диапазон знает свой размер за постоянное время
(концепт)
возвращает целое число, равное размеру диапазона
(объект точки кастомизации)