C++ benannte Anforderungen: LegacyIterator
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
Iterfüllt CopyConstructible, und - Der Typ
Iterfüllt CopyAssignable, und - Der Typ
Iterfüllt Destructible, und - Der Typ
Iterfüllt Swappable, und - std::iterator_traits<It> hat Mitgliedstypen
value_type(bis C++20),difference_type,reference,pointerunditerator_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) |
KonzeptFür die Definition von std::iterator_traits wird das folgende exposition-only-Konzept definiert.
wobei das expositions-only-Konzept __Referenceable<T> genau dann erfüllt ist, wenn T& ein gültiger Typ ist (insbesondere darf |
(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
| (C++20) |
spezifiziert, dass Objekte eines Typs inkrementiert und dereferenziert werden können (Konzept) |
| Iterator-Bibliothek | stellt Definitionen für Iteratoren, Iterator-Traits, Adaptoren und Hilfsfunktionen bereit |