Namespaces
Variants

std::experimental::ranges:: ForwardIterator

From cppreference.net
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> erweitert InputIterator durch Hinzufügen von Gleichheitsvergleichen und der Multi-Pass-Garantie.

Der Definitionsbereich von == für Forward-Iteratoren ist der von Iteratoren über derselben zugrundeliegenden Sequenz, mit der Ausnahme, dass wertinitialisierte Iteratoren desselben Typs miteinander verglichen werden können und gleich vergleichen sollen.

Zeiger und Referenzen, die von einem Forward-Iterator in einen Bereich erhalten werden [ i , s ) müssen gültig bleiben, solange [ i , s ) weiterhin 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 ) ist äquivalent zu * a , d.h. das Inkrementieren einer Kopie von a hat keine Auswirkung auf das Ergebnis der Dereferenzierung von a .

Dies wird als multi-pass guarantee bezeichnet.

Hinweise

Ein Forward-Iterator kann nicht "stashing" sein: Er kann keine Referenz auf ein Objekt innerhalb seiner selbst zurückgeben, weil solche Referenzen durch die Zerstörung des Forward-Iterators ungültig werden würden.