Namensräume
Varianten
Aktionen

std::sized_sentinel_for, std::disable_sized_sentinel_for

Von cppreference.com
< cpp‎ | iterator
 
 
Iterator-Bibliothek
Iterator-Konzepte
sized_sentinel_for
(C++20)

Iterator-Primitive
Algorithmus-Konzepte und Hilfsprogramme
Indirekte aufrufbare Konzepte
Gemeinsame Algorithmus-Anforderungen
(C++20)
(C++20)
(C++20)
Dienstprogramme
(C++20)
Iterator-Adapter
Bereichszugriff
(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 Konzept sized_sentinel_for gibt an, dass ein Objekt vom Iterator-Typ I und ein Objekt vom Sentinel-Typ S subtrahiert werden können, um die Distanz zwischen ihnen in konstanter Zeit zu berechnen.
2) Das Variablen-Template disable_sized_sentinel_for kann verwendet werden, um zu verhindern, dass Iteratoren und Sentinels, die subtrahiert werden können, aber nicht tatsächlich sized_sentinel_for modellieren, das Konzept erfüllen.
Ein Programm kann disable_sized_sentinel_for für cv-unqualified Nicht-Array-Objekttypen S und I spezialisieren, solange mindestens einer davon ein programmdefinierter Typ ist. Solche Spezialisierungen sind in Konstanten Ausdrücken verwendbar und haben den Typ const bool.

Inhalt

[bearbeiten] Semantische Anforderungen

Sei i ein Iterator vom Typ I und s ein Sentinel vom Typ S, sodass [is) einen Bereich bezeichnet. Sei n die kleinste Anzahl von Anwendungen von ++i, die erforderlich sind, um bool(i == s) zu true zu machen. I und S modellieren sized_sentinel_for<S, I> nur, wenn alle folgenden Bedingungen erfüllt sind.

[bearbeiten] Gleichheitserhaltung

Ausdrücke, die in requires-Ausdrücken der Standardbibliothekskonzepte deklariert sind, müssen gleichheitserhaltend sein (sofern nicht anders angegeben).

[bearbeiten] Implizite Ausdrucksvariationen

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

[bearbeiten] Siehe auch

spezifiziert, dass ein Range seine Größe in konstanter Zeit kennt
(Konzept) [edit]
gibt eine Ganzzahl zurück, die der Größe eines Ranges entspricht
(Customization Point Objekt)[edit]