Namensräume
Varianten
Aktionen

std::experimental::ranges::ForwardIterator

Von cppreference.com
< cpp‎ | experimental‎ | ranges
 
 
 
 
Iterator-Bibliothek
Iterator-Konzepte
Indirekte aufrufbare Konzepte
                                                  
                                                  
                                                  
Gemeinsame Algorithmus-Anforderungen
                                                  
Konzept-Dienstprogramme
Iterator-Dienstprogramme und -Operationen
Iterator-Traits
Iterator-Adapter
Stream-Iteratoren
 
Definiert in Header <experimental/ranges/iterator>
template< class I >

concept bool ForwardIterator =
    InputIterator<I> &&
    DerivedFrom<ranges::iterator_category_t<I>, ranges::forward_iterator_tag> &&
    Incrementable<I> &&

    Sentinel<I, I>;
(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 [is) erhalten werden, müssen gültig bleiben, solange [is) 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 a hat keinen Einfluss auf das Ergebnis des Dereferenzierens von a.

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.