Namespaces
Variants

std:: contiguous_iterator

From cppreference.net
Iterator library
Iterator concepts
contiguous_iterator
(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>
(seit C++20)

Das contiguous_iterator -Konzept verfeinert random_access_iterator , indem es die Garantie bereitstellt, dass die bezeichneten Elemente zusammenhängend im Speicher gespeichert sind.

Gegeben einen Iterator i eines Typs, der contiguous_iterator modelliert, einen Sentinel s und eine nicht-negative Ganzzahl n :

Dies bedeutet, dass ein Programm sich nicht auf Nebeneffekte des Dereferenzierens, Inkrementierens oder Dekrementierens eines contiguous Iterators i verlassen kann, weil Standardbibliotheksfunktionen möglicherweise mit Zeigern arbeiten, die durch std:: to_address ( i ) erhalten wurden, anstatt direkt mit i zu arbeiten.

(seit C++26)

Inhaltsverzeichnis

Iterator-Konzeptbestimmung

Die Definition dieses Konzepts wird über einen nur zur Darstellung dienenden Alias-Template /*ITER_CONCEPT*/ spezifiziert.

Um /*ITER_CONCEPT*/ < I > zu bestimmen, sei ITER_TRAITS < I > definiert als I falls die Spezialisierung std:: iterator_traits < I > von der primären Template-Definition generiert wird, andernfalls als std:: iterator_traits < I > :

  • Falls ITER_TRAITS < I > :: iterator_concept gültig ist und einen Typ benennt, bezeichnet /*ITER_CONCEPT*/ < I > den Typ.
  • Andernfalls, falls ITER_TRAITS < I > :: iterator_category gültig ist und einen Typ benennt, bezeichnet /*ITER_CONCEPT*/ < I > den Typ.
  • Andernfalls, falls std:: iterator_traits < I > von der primären Template-Spezialisierung generiert wird, bezeichnet /*ITER_CONCEPT*/ < I > std::random_access_iterator_tag .
    (Das heißt, std:: derived_from < /*ITER_CONCEPT*/ < I > , std:: contiguous_iterator_tag > wird als false angenommen.)
  • Andernfalls bezeichnet /*ITER_CONCEPT*/ < I > keinen Typ und führt zu einem Substitutionsfehler.

Semantische Anforderungen

Seien a und b dereferenzierbare Iteratoren und c ein nicht-dereferenzierbarer Iterator vom Typ I , sodass b von a erreichbar ist und c von b erreichbar ist. Der Typ I modelliert contiguous_iterator nur dann, wenn alle von ihm subsumierten Konzepte modelliert werden und 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 .

Hinweise

contiguous_iterator wird von jedem Zeigertyp auf einen vollständigen Objekttyp modelliert.

Iteratortypen in der Standardbibliothek, die in C++17 die Anforderungen an LegacyContiguousIterator erfüllen müssen, sind auch in C++20 verpflichtet, das Konzept contiguous_iterator zu modellieren.

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 3607 C++20 contiguous_iterator könnte benutzerdefinierte
ranges::iter_move und ranges::iter_swap Verhalten haben
verboten
LWG 4170 C++20 ein Paar wertinitialisierter contiguous_iterator s
könnte möglicherweise keinen leeren Bereich darstellen
garantiert

Siehe auch

spezifiziert, dass ein bidirectional_iterator ein Random-Access-Iterator ist, der Vorwärts- und Rückwärtsbewegung in konstanter Zeit und Indizierung unterstützt
(Konzept)