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)
Definiert in Header <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) (seit C++20)
template < class S, class I >
inline constexpr bool disable_sized_sentinel_for = false ;
(2) (seit C++20)
1) Das sized_sentinel_for Konzept spezifiziert, dass ein Objekt des Iteratortyps I und ein Objekt des Sentineltyps S subtrahiert werden können, um den Abstand zwischen ihnen in konstanter Zeit zu berechnen.
2) Die disable_sized_sentinel_for Variable Template kann verwendet werden, um zu verhindern, dass Iteratoren und Sentinel, die subtrahiert werden können, aber nicht tatsächlich das Konzept sized_sentinel_for modellieren, das Konzept erfüllen.
Ein Programm kann disable_sized_sentinel_for für cv-unqualifizierte Nicht-Array-Objekttypen S und I spezialisieren, sofern mindestens einer davon ein programmdefinierter Typ ist. Solche Spezialisierungen sind in konstanten Ausdrücken verwendbar und haben den Typ const bool .

Inhaltsverzeichnis

Semantische Anforderungen

Sei i ein Iterator vom Typ I , und s ein Sentinel vom Typ S , sodass [ i , s ) einen Bereich bezeichnet. Sei n die kleinste Anzahl von Anwendungen von ++ i , die notwendig ist, damit bool ( i == s ) den Wert true annimmt. I und S modellieren sized_sentinel_for<S, I> nur dann, wenn alle folgenden Bedingungen erfüllt sind:

Gleichheitserhaltung

Ausdrücke, die in requires expressions der Standardbibliothek-Konzepte deklariert werden, müssen equality-preserving sein (sofern nicht anders angegeben).

Implizite Ausdrucksvarianten

Ein requires -Ausdruck , der einen Ausdruck verwendet, der für einen konstanten Lvalue-Operanden nicht-modifizierend ist, erfordert ebenfalls implizite Ausdrucksvarianten .

Siehe auch

spezifiziert, dass ein Bereich seine Größe in konstanter Zeit kennt
(Konzept)
gibt einen Integer gleich der Größe eines Bereichs zurück
(Anpassungspunktobjekt)