Requisitos denominados de C++: InputIterator
Un IteradorDeEntradaLegado es un IteradorLegado que puede leer del elemento al que se apunta. Los IteradorDeEntradaLegado solamente garantizan la validez para algoritmos de una sola pasada: una vez que un IteradorDeEntradaLegado i se ha incrementado, todas las copias de su valor previo pueden haberse invalidado.
Requisitos
| Tipo | Definición |
X
|
Un tipo iterador de entrada. |
T
|
El value type de X (por ejemplo, std::iterator_traits<X>::value_type).
|
R
|
std::iterator_traits<X>::reference
|
| Valor | Definición |
i, j
|
Valores de tipo X o const X.
|
r
|
Un valor de tipo X&.
|
| Otros | Definición |
m
|
Un identificador que puede denotar un miembro de datos o una función miembro. |
X satisface a IteradorDeEntradaLegado si se satisfacen todas las condiciones siguientes:
Xsatisface a IteradorLegado.Xsatisface a ComparableEnIgualdad.- Las siguientes expresiones están bien formadas y tienen la semántica especificada:
| Expresión | Tipo | Semántica | |||||
|---|---|---|---|---|---|---|---|
i != j
|
|
Precondición | i y j están en el dominio de ==.
| ||||
| Efecto | Equivalente a !(i == j).
| ||||||
*i
|
R, convertible a T
|
Precondición | i es desreferenciable.
| ||||
| Efecto |
| ||||||
i->m
|
Precondición | i es desreferenciable.
| |||||
| Efecto | Equivalente a (*i).m.
| ||||||
++r
|
X&
|
Precondición | r es desreferenciable.
| ||||
| Poscondición |
| ||||||
(void)r++
|
Efecto | Equivalente a (void)++r.
| |||||
*r++
|
convertible a T
|
Efecto | Equivalente a T x = *r; ++r; return x;.
| ||||
Dominio de la igualdad
El termino dominio de == se usa en el sentido matemático ordinario para indicar el conjunto de valores que se pueden comparar usando ==. Este conjunto puede cambiar con el tiempo.
Cada algoritmo impone requisitos adicionales en el dominio de igualdad para los valores de iterador que usa. Estos requisitos se pueden inferir a partir de los usos que hace el algoritmo de == y !=.
Notas
Para un iterador de entrada X que no es un IteradorDeAvanceLegado, std::iterator_traits<X>::reference no tiene que ser un tipo referencia: desreferenciar un iterador de entrada puede devolver un objeto proxy o std::iterator_traits<X>::value_type en sí mismo por valor (como en el caso de std::istreambuf_iterator).
ConceptoPara la definición de std::iterator_traits, se define el siguiente concepto solo para exposición. <tbody> </tbody>
donde el concepto solo para exposición |
(desde C++20) |
Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
| ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 98 | C++98 | Se requería que el tipo de retorno de *i++ fuera T.
|
Puede ser cualquier tipo convertible a T.
|
| P2167R3 | C++98 | La convertibilidad a bool era demasiado débilpara reflejar la expectativa de las implementaciones |
Se refuerzan los requisitos. |
Véase también
(C++20) |
Especifica que un tipo es un iterador de entrada, es decir, los valores a los que hace referencia se pueden leer y se pueden preincrementar y posincrementar. (concepto) |
| Biblioteca de iteradores | Proporciona definiciones para iteradores, rasgos de iteradores, adaptadores y funciones de servicio. |