Namespaces
Variants

std::experimental::ranges:: ForwardIterator

From cppreference.net
Definido en el encabezado <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)

El concepto ForwardIterator<I> refina InputIterator añadiendo comparación de igualdad y la garantía de múltiples pasadas.

El dominio de == para forward iterators es el de iteradores sobre la misma secuencia subyacente, excepto que los iteradores value-initialized del mismo tipo pueden compararse entre sí y deben compararse como iguales.

Los punteros y referencias obtenidos de un iterador de avance en un rango [ i , s ) deben permanecer válidos mientras [ i , s ) continúe denotando un rango.

Sean a y b dos iteradores dereferenciables de tipo I . ForwardIterator<I> se satisface solo si:

  • a == b implica ++ a == ++ b ; y
  • La expresión ( [ ] ( X x ) { ++ x ; } ( a ) , * a ) es equivalente a * a , es decir, incrementar una copia de a no tiene efecto en el resultado de desreferenciar a .

Esto se conoce como la multi-pass guarantee .

Notas

Un iterador de avance no puede ser "de almacenamiento": no puede devolver una referencia a un objeto dentro de sí mismo, porque dichas referencias quedarían invalidadas por la destrucción del iterador de avance.