C++ benannte Anforderungen: LegacyRandomAccessIterator
Ein LegacyRandomAccessIterator ist ein LegacyBidirectionalIterator, der in konstanter Zeit auf jedes Element zeigen kann.
Wenn ein LegacyRandomAccessIterator it aus einem Container stammt, dann ist it's value_type dasselbe wie das des Containers, sodass Dereferenzierung (*it) den value_type des Containers erhält.
Ein Zeiger auf ein Element eines Arrays erfüllt alle Anforderungen eines LegacyRandomAccessIterator.
Inhalt |
[bearbeiten] Anforderungen
Der Typ It erfüllt LegacyRandomAccessIterator, wenn
- Der Typ
Iterfüllt LegacyBidirectionalIterator
Und, gegeben
-
value_type, der Typ, auf den std::iterator_traits<It>::value_type verweist -
difference_type, der Typ, auf den std::iterator_traits<It>::difference_type verweist -
reference, der Typ, auf den std::iterator_traits<It>::reference verweist - i, a, b, Objekte vom Typ
Itoder const It - r, ein lvalue vom Typ
It - n, eine Ganzzahl vom Typ
difference_type
Die folgenden Ausdrücke müssen gültig sein und ihre angegebenen Effekte haben
| Ausdruck | Rückgabetyp | Operationale Semantik | Anmerkungen | ||||
|---|---|---|---|---|---|---|---|
| r += n | It&
|
difference_type m = n; if (m >= 0) while (m--) ++r; |
| ||||
| a + n
n + a |
It
|
It temp = a; return temp += n; |
| ||||
| r -= n | It& |
return r += -n; | Der absolute Wert von n muss im Bereich der darstellbaren Werte von difference_type liegen. | ||||
| i - n | It |
It temp = i; return temp -= n; |
|||||
| b - a | difference_type |
return n; (siehe Vorbedingung) |
Vorbedingung
Nachbedingung
| ||||
| i[n] | konvertierbar zu reference |
*(i + n) | |||||
| a < b |
|
Äquivalent zu return b - a > 0; | Vorbedingung
Strikte totale Ordnungsrelation
| ||||
| a > b |
|
b < a | Totale Ordnungsrelation, entgegengesetzt zu a < b | ||||
| a >= b |
|
!(a < b) | |||||
| a <= b |
|
!(a > b) |
Die obigen Regeln implizieren, dass LegacyRandomAccessIterator auch LessThanComparable implementiert.
Ein *mutable* LegacyRandomAccessIterator ist ein LegacyRandomAccessIterator, der zusätzlich die Anforderungen von LegacyOutputIterator erfüllt.
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[n] war erforderlich konvertierbar zu const value_type& zu sein |
der Rückgabetyp ist erforderlich zu reference konvertierbar zu sein |
| LWG 448 | C++98 | der Rückgabetyp von a[n] war erforderlich zu value_type konvertierbar zu sein |
der Rückgabetyp ist erforderlich zu const value_type& konvertierbar zu sein[1] |
| LWG 1079 | C++98 | b - a wurde definiert unter Verwendung von a < b, führte zu zirkulärer Definition |
entfernt a < b aus der Definition |
| LWG 2114 (P2167R3) |
C++98 | Konvertierbarkeit in bool war zu schwach, um die Erwartungen der Implementierungen widerzuspiegeln | Anforderungen verstärkt |
- ↑ LWG issue 299 wurde nach dieser Auflösung wiedereröffnet.
[bearbeiten] Siehe auch
| (C++20) |
spezifiziert, dass ein bidirectional_iterator ein Zufallszugriff-Iterator ist, der die Vorwärtsbewegung in konstanter Zeit und Indizierung unterstützt(Konzept) |
| Iterator-Bibliothek | stellt Definitionen für Iteratoren, Iterator-Traits, Adaptoren und Hilfsfunktionen bereit |