C++ named requirements: LegacyRandomAccessIterator
Ein LegacyRandomAccessIterator ist ein LegacyBidirectionalIterator der in konstanter Zeit auf jedes Element bewegt werden kann.
Wenn ein
LegacyRandomAccessIterator
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.
Ein Zeiger auf ein Element eines Arrays erfüllt alle Anforderungen eines LegacyRandomAccessIterator .
Inhaltsverzeichnis |
Anforderungen
Der Typ
It
erfüllt die Anforderungen von
LegacyRandomAccessIterator
wenn
-
Der Typ
Iterfüllt die Anforderungen eines LegacyBidirectionalIterator
Und, gegeben
-
value_type, der Typ bezeichnet durch std:: iterator_traits < It > :: value_type -
difference_type, der Typ bezeichnet durch std:: iterator_traits < It > :: difference_type -
reference, der Typ bezeichnet durch std:: iterator_traits < It > :: reference -
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 spezifizierten Effekte haben:
| Ausdruck | Rückgabetyp | Operative 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 innerhalb des Bereichs der darstellbaren Werte von
difference_type
liegen.
|
||||
| i - n |
Es
|
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:
Strenge Totalordnung:
|
||||
| a > b |
|
b < a | Totale Ordnungsrelation entgegengesetzt zu a < b | ||||
| a >= b |
|
! ( a < b ) | |||||
| a <= b |
|
! ( a > b ) |
Die obigen Regeln implizieren, dass LegacyRandomAccessIterator ebenfalls LessThanComparable implementiert.
Ein mutable LegacyRandomAccessIterator ist ein LegacyRandomAccessIterator , der zusätzlich die Anforderungen eines LegacyOutputIterator erfüllt.
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
[
n
]
musste
konvertierbar zu const value_type & sein |
Der Rückgabetyp muss
konvertierbar zu
reference
sein
|
| LWG 448 | C++98 |
Der Rückgabetyp von
a
[
n
]
musste
konvertierbar zu
value_type
sein
|
Der Rückgabetyp muss
konvertierbar zu const value_type & [1] sein |
| LWG 1079 | C++98 |
b
-
a
wurde unter Verwendung von
a
<
b
definiert,
führte zu zirkulärer Definition |
Entfernte a < b aus der Definition |
|
LWG 2114
( P2167R3 ) |
C++98 | Konvertierbarkeit zu bool war zu schwach, um die Erwartungen der Implementierungen widerzuspiegeln | Anforderungen verstärkt |
- ↑ LWG issue 299 wurde nach dieser Entscheidung wiedereröffnet.
Siehe auch
|
(C++20)
|
spezifiziert, dass ein
bidirectional_iterator
ein Random-Access-Iterator ist, der Vorwärts- und Rückwärtsbewegung in konstanter Zeit und Indizierung unterstützt
(Konzept) |
| Iterator-Bibliothek | stellt Definitionen für Iteratoren, Iterator-Traits, Adapter und Hilfsfunktionen bereit |