std::experimental::ranges:: ForwardIterator
| Technical Specification | ||||
| Filesystem library (filesystem TS) | ||||
| Library fundamentals (library fundamentals TS) | ||||
| Library fundamentals 2 (library fundamentals TS v2) | ||||
| Library fundamentals 3 (library fundamentals TS v3) | ||||
| Extensions for parallelism (parallelism TS) | ||||
| Extensions for parallelism 2 (parallelism TS v2) | ||||
| Extensions for concurrency (concurrency TS) | ||||
| Extensions for concurrency 2 (concurrency TS v2) | ||||
| Concepts (concepts TS) | ||||
| Ranges (ranges TS) | ||||
| Reflection (reflection TS) | ||||
| Mathematical special functions (special functions TR) | ||||
| Experimental Non-TS | ||||
| Pattern Matching | ||||
| Linear Algebra | ||||
| std::execution | ||||
| Contracts | ||||
| 2D Graphics |
| Iterator concepts | |||||||||||||||||||||||
|
|||||||||||||||||||||||
| Indirect callable concepts | |||||||||||||||||||||||
| Common algorithm requirements | |||||||||||||||||||||||
| Concept utilities | |||||||||||||||||||||||
| Iterator utilities and operations | |||||||||||||||||||||||
| Iterator traits | |||||||||||||||||||||||
| Iterator adaptors | |||||||||||||||||||||||
| Stream iterators | |||||||||||||||||||||||
|
Definido en el encabezado
<experimental/ranges/iterator>
|
||
|
template
<
class
I
>
concept
bool
ForwardIterator
=
|
(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
ano tiene efecto en el resultado de desreferenciara.
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.