C++ benannte Anforderungen: LegacyInputIterator
Ein LegacyInputIterator ist ein LegacyIterator, der aus dem angesteuerten Element lesen kann. LegacyInputIterators garantieren Gültigkeit nur für Algorithmen mit einem Durchlauf: Sobald ein LegacyInputIterator i inkrementiert wurde, können alle Kopien seines vorherigen Wertes ungültig werden.
Inhalt |
[bearbeiten] Anforderungen
| Typ | Definition |
X
|
Ein Eingabeiterator-Typ |
T
|
Der Werttyp 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 Datenmember 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 angegebene Semantik
| Ausdruck | Typ | Semantik | |||||
|---|---|---|---|---|---|---|---|
| i != j |
|
Vorbedingung | i und j liegen in der Domäne von ==. | ||||
| Auswirkung | Äquivalent zu !(i == j). | ||||||
| *i | konvertierbar nach T |
Vorbedingung | i ist dereferenzierbar. | ||||
| Auswirkung |
| ||||||
| i->m | Vorbedingung | i ist dereferenzierbar. | |||||
| Auswirkung | Äquivalent zu (*i).m. | ||||||
| ++r | X&
|
Vorbedingung | r ist dereferenzierbar. | ||||
| Nachbedingung |
| ||||||
| (void)r++ | Auswirkung | Äquivalent zu (void)++r. | |||||
| *r++ | konvertierbar nach T |
Auswirkung | Äquivalent zu T x = *r; ++r; return x;. | ||||
[bearbeiten] Gleichheitsdomäne
Der Begriff die Domäne 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 die Gleichheitsdomäne für die von ihm verwendeten Iteratorwerte. Diese Anforderungen können aus der Verwendung von == und != durch den Algorithmus abgeleitet werden.
[bearbeiten] Hinweise
Für einen Eingabeiterator X, der kein LegacyForwardIterator ist, muss std::iterator_traits<X>::reference kein Referenztyp sein: Das Dereferenzieren eines Eingabeiterators kann ein Proxy-Objekt oder std::iterator_traits<X>::value_type selbst per Wert zurückgeben (wie im Fall von std::istreambuf_iterator).
KonzeptFür die Definition von std::iterator_traits wird das folgende exposition-only-Konzept definiert.
wobei das expositions-nur-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 98 | C++98 | der Rückgabetyp von *i++ war erforderlich, um T zu sein |
er kann jeder Typ sein, der nach T konvertierbar ist |
| LWG 2114 (P2167R3) |
C++98 | die Konvertierbarkeit nach bool war zu schwach, um die Erwartungen der Implementierungen widerzuspiegeln |
Anforderungen verstärkt |
[bearbeiten] Siehe auch
| (C++20) |
spezifiziert, dass ein Typ ein Eingabeiterator ist, d. h. 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, Adaptoren und Hilfsfunktionen bereit |