C++ named requirements: 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
it
's
value_type
identisch mit dem des Containers, daher ergibt die Dereferenzierung (
*
it
) den
value_type
des Containers.
Inhaltsverzeichnis |
Anforderungen
Der Typ
It
erfüllt die Anforderungen von
LegacyBidirectionalIterator
wenn
-
Der Typ
Iterfüllt die Anforderungen eines LegacyForwardIterator
Und, gegeben
-
a
und
b
, Lvalues vom Typ
It -
reference, der durch std:: iterator_traits < It > :: reference bezeichnete Typ
Die folgenden Ausdrücke müssen gültig sein und ihre spezifizierten Effekte haben:
| Ausdruck | Rückgabe | Äquivalenter Ausdruck | Anmerkungen |
|---|---|---|---|
| -- a |
It&
|
Vorbedingungen:
Nachbedingungen:
|
|
| a -- | konvertierbar zu const It & |
It temp
=
a
;
--
a
;
|
|
| * a -- |
reference
|
Ein mutable LegacyBidirectionalIterator ist ein LegacyBidirectionalIterator , der zusätzlich die Anforderungen eines LegacyOutputIterator erfüllt.
Hinweise
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, nur zur Darstellung dienende Konzept definiert.
wobei das nur zur Darstellung dienende Konzept
|
(seit C++20) |
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 299
( N3066 ) |
C++98 |
Der Rückgabetyp von
*
a
--
musste konvertierbar zu
T
sein
|
Änderung des Rückgabe-
typs zu
reference
[1]
|
| LWG 383 | C++98 | b musste nach -- a dereferenzierbar sein | a muss stattdessen dereferenzierbar sein |
|
LWG 1212
( N3066 ) |
C++98 |
Der Rückgabetyp von
*
a
--
entsprach nicht dem Rückgabe-
typ von * a ++ wie von LegacyForwardIterator gefordert |
Änderung des Rückgabe-
typs zu
reference
|
- ↑ Dieses Problem wurde ursprünglich durch N2758 (Iterator-Konzepte) gelöst, das später aus dem C++-Standard entfernt wurde.
Siehe auch
|
(C++20)
|
spezifiziert, dass ein
forward_iterator
ein bidirektionaler Iterator ist, der Rückwärtsbewegung unterstützt
(Konzept) |
| Iterator-Bibliothek | stellt Definitionen für Iteratoren, Iterator-Traits, Adapter und Hilfsfunktionen bereit |