Namensräume
Varianten
Aktionen

C++ benannte Anforderungen: LegacyIterator

Von cppreference.com
 
 
C++ benannte Anforderungen
 

Die LegacyIterator-Anforderungen beschreiben Typen, die verwendet werden können, um Elemente eines Containers zu identifizieren und zu durchlaufen.

LegacyIterator ist der Basissatz von Anforderungen, der von anderen Iteratortypen verwendet wird: LegacyInputIterator, LegacyOutputIterator, LegacyForwardIterator, LegacyBidirectionalIterator und LegacyRandomAccessIterator. Iteratoren können als eine Abstraktion von Zeigern betrachtet werden.

Alle Iterator-Kategorien erfordern nur diejenigen Funktionen, die für eine gegebene Kategorie in konstanter Zeit (amortisiert) realisierbar sind. Daher spezifizieren die Anforderungstabellen und Konzeptdefinitionen(seit C++20)für die Iteratoren keine Komplexität.

Inhalt

[bearbeiten] Anforderungen

Der Typ It erfüllt LegacyIterator, wenn

  • Der Typ It erfüllt CopyConstructible, und
  • Der Typ It erfüllt CopyAssignable, und
  • Der Typ It erfüllt Destructible, und
  • Der Typ It erfüllt Swappable, und
  • std::iterator_traits<It> hat Mitgliedstypen value_type(bis C++20), difference_type, reference, pointer und iterator_category, und
  • Gegeben sei r, ein lvalue vom Typ It, müssen die folgenden Ausdrücke gültig sein und ihre spezifizierten Effekte haben
Ausdruck Rückgabetyp Vorbedingung
*r nicht spezifiziert r ist dereferenzierbar
++r It& r ist *inkrementierbar* (das Verhalten des Ausdrucks ++r ist definiert)

Konzept

Für die Definition von std::iterator_traits wird das folgende exposition-only-Konzept definiert.

template<class I>

concept __LegacyIterator =
    requires(I i)
    {
        {   *i } -> __Referenceable;
        {  ++i } -> std::same_as<I&>;
        { *i++ } -> __Referenceable;

    } && std::copyable<I>;

wobei das expositions-only-Konzept __Referenceable<T> genau dann erfüllt ist, wenn T& ein gültiger Typ ist (insbesondere darf T nicht void sein).

(seit C++20)

[bearbeiten] Fehlerberichte

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

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 2437 C++98 *r soll reference sein nicht erforderlich für Output-Iteratoren
LWG 3420 C++20 das expositions-only-Konzept prüft zuerst copyable copyable wird nur geprüft, wenn der requires-Ausdruck true ergibt

[bearbeiten] Siehe auch

spezifiziert, dass Objekte eines Typs inkrementiert und dereferenziert werden können
(Konzept) [bearbeiten]
Iterator-Bibliothek stellt Definitionen für Iteratoren, Iterator-Traits, Adaptoren und Hilfsfunktionen bereit