C++ named requirements: LegacyInputIterator
Ein LegacyInputIterator ist ein LegacyIterator , der vom gezeigten Element lesen kann. LegacyInputIterator s garantieren Gültigkeit nur für Einmal-Durchlauf-Algorithmen: Sobald ein LegacyInputIterator i inkrementiert wurde, können alle Kopien seines vorherigen Wertes ungültig werden.
Inhaltsverzeichnis |
Anforderungen
| Typ | Definition |
X
|
Ein Input-Iterator-Typ |
T
|
Der
value type
von
X
(d.h.
std::
iterator_traits
<
X
>
::
value_type
)
|
R
|
std:: iterator_traits < X > :: reference |
| Wert | Definition |
| i , j |
Werte vom Typ
X
oder
const
X
|
| r |
Ein Wert vom Typ
X&
|
| Sonstiges | Definition |
m
|
Ein Bezeichner, der möglicherweise ein Datenmitglied oder eine Memberfunktion bezeichnet |
X
erfüllt
LegacyInputIterator
wenn alle folgenden Bedingungen erfüllt sind:
-
Xerfüllt LegacyIterator . -
Xerfüllt EqualityComparable . - Die folgenden Ausdrücke sind wohlgeformt und haben die spezifizierte Semantik:
| Ausdruck | Typ | Semantik | |||||
|---|---|---|---|---|---|---|---|
| i ! = j |
|
Vorbedingung | i und j befinden sich in der Domäne von == . | ||||
| Effekt | Äquivalent zu ! ( i == j ) . | ||||||
| * i |
R
, konvertierbar zu
T
|
Vorbedingung | i ist dereferenzierbar . | ||||
| Effekt |
|
||||||
| i - > m | Vorbedingung | i ist dereferenzierbar. | |||||
| Effekt | Äquivalent zu ( * i ) . m . | ||||||
| ++ r |
X&
|
Vorbedingung | r ist dereferenzierbar. | ||||
| Nachbedingung |
|
||||||
| ( void ) r ++ | Effekt | Äquivalent zu ( void ) ++ r . | |||||
| * r ++ |
konvertierbar zu
T
|
Effekt | Äquivalent zu T x = * r ; ++ r ; return x ; . | ||||
Gleichheitsbereich
Der Begriff der Definitionsbereich von == wird im gewöhnlichen mathematischen Sinne verwendet, um die Menge der Werte zu bezeichnen, die mit == verglichen werden können. Diese Menge kann sich im Laufe der Zeit ändern.
Jeder Algorithmus stellt zusätzliche Anforderungen an den Gleichheitsbereich für die Iteratorwerte, die er verwendet. Diese Anforderungen können aus den Verwendungen abgeleitet werden, die der Algorithmus von == und ! = macht.
Hinweise
Für einen Eingabeiterator
X
, der kein
LegacyForwardIterator
ist,
std::
iterator_traits
<
X
>
::
reference
muss kein Referenztyp sein: Das Dereferenzieren eines Eingabeiterators kann ein Proxy-Objekt oder
std::
iterator_traits
<
X
>
::
value_type
selbst als Wert zurückgeben (wie im Fall von
std::istreambuf_iterator
).
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 | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 98 | C++98 |
der Rückgabetyp von
*
i
++
musste
T
sein
|
es kann jeder zu
T
konvertierbare Typ sein
|
|
LWG 2114
( P2167R3 ) |
C++98 |
Konvertierbarkeit zu
bool
war zu schwach, um
die Erwartungen der Implementierungen widerzuspiegeln |
Anforderungen verstärkt |
Siehe auch
|
(C++20)
|
spezifiziert, dass ein Typ ein Eingabe-Iterator ist, das heißt, seine referenzierten Werte können gelesen werden und er kann sowohl prä- als auch post-inkrementiert werden
(Konzept) |
| Iterator-Bibliothek | stellt Definitionen für Iteratoren, Iterator-Traits, Adapter und Hilfsfunktionen bereit |