std::experimental::ranges::ForwardIterator
| Definiert in Header <experimental/ranges/iterator> |
||
| template< class I > concept bool ForwardIterator = |
(Ranges TS) | |
Das Konzept ForwardIterator<I> baut auf InputIterator auf und fügt Gleichheitsvergleiche sowie die Garantie mehrerer Durchläufe hinzu.
Der Definitionsbereich von == für Forward-Iteratoren ist der von Iteratoren, die sich auf dieselbe zugrunde liegende Sequenz beziehen, mit der Ausnahme, dass wertinitialisierte Iteratoren desselben Typs miteinander verglichen werden können und gleich sein sollen.
Zeiger und Referenzen, die von einem Forward-Iterator auf einen Bereich [i, s) erhalten werden, müssen gültig bleiben, solange [i, s) einen Bereich bezeichnet.
Seien a und b zwei dereferenzierbare Iteratoren vom Typ I. ForwardIterator<I> ist nur dann erfüllt, wenn
- a == b impliziert ++a == ++b; und
- der Ausdruck ([](X x){ ++x; }(a), *a) äquivalent zu *a ist, d.h. das Inkrementieren einer Kopie von
ahat keinen Einfluss auf das Ergebnis des Dereferenzierens vona.
Dies ist bekannt als die Multi-Pass-Garantie.
[bearbeiten] Anmerkungen
Ein Forward-Iterator kann kein "Stashing" betreiben: Er kann keine Referenz auf ein Objekt innerhalb von sich selbst zurückgeben, da solche Referenzen durch die Zerstörung des Forward-Iterators ungültig würden.