C++ benannte Anforderungen: LegacyBidirectionalIterator
Ein LegacyBidirectionalIterator ist ein LegacyForwardIterator, der in beide Richtungen bewegt werden kann (d.h. inkrementiert und dekrementiert).
Wenn ein LegacyBidirectionalIterator it von einem Container stammt, dann ist der value_type von it derselbe wie der des Containers, sodass Dereferenzierung (*it) den value_type des Containers ergibt.
Inhalt |
[bearbeiten] Anforderungen
Der Typ It erfüllt LegacyBidirectionalIterator, wenn
- Der Typ
Iterfüllt LegacyForwardIterator
Und, gegeben
- a und b, lvalues vom Typ
It -
reference, der Typ, der durch std::iterator_traits<It>::reference bezeichnet wird
Die folgenden Ausdrücke müssen gültig sein und ihre angegebenen Effekte haben
| Ausdruck | Rückgabe | Äquivalenter Ausdruck | Anmerkungen |
|---|---|---|---|
| --a | It& |
Vorbedingungen
Nachbedingungen
| |
| a-- | konvertierbar zu const It& | It temp = a; --a; |
|
| *a-- | Referenz |
Ein mutable LegacyBidirectionalIterator ist ein LegacyBidirectionalIterator, der zusätzlich die Anforderungen an LegacyOutputIterator erfüllt.
[bearbeiten] Anmerkungen
Der Begin-Iterator ist nicht dekrementierbar und das Verhalten ist undefiniert, wenn --container.begin() ausgewertet wird.
Ein bidirektionaler Iterator muss nicht dereferenzierbar sein, um dekrementierbar zu sein (insbesondere ist der End-Iterator nicht dereferenzierbar, aber dekrementierbar).
KonzeptFür die Definition von std::iterator_traits wird das folgende exposition-only-Konzept definiert.
wobei das exposition-only Konzept |
(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 299 (N3066) |
C++98 | der Rückgabetyp von *a-- war gefordert, nach T konvertierbar zu sein |
geändert den Rückgabe typ zu reference[1] |
| LWG 383 | C++98 | b musste nach --a dereferenzierbar sein | stattdessen muss a dereferenzierbar sein |
| LWG 1212 (N3066) |
C++98 | der Rückgabetyp von *a-- entsprach nicht dem Rückgabe typ von *a++, der von LegacyForwardIterator gefordert wurde |
geändert den Rückgabe typ zu reference |
- ↑ Dieses Problem wurde ursprünglich durch N2758 (Iterator-Konzepte) gelöst, das später aus dem C++-Standard entfernt wurde.
[bearbeiten] Siehe auch
| (C++20) |
spezifiziert, dass ein forward_iterator ein bidirektionaler Iterator ist, der die Rückwärtsbewegung unterstützt(Konzept) |
| Iterator-Bibliothek | stellt Definitionen für Iteratoren, Iterator-Traits, Adaptoren und Hilfsfunktionen bereit |