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.
Contenido |
[editar] 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:
-
X
satisface a IteradorLegado. -
X
satisface 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;. |
[editar] 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 !=.
[editar] 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.
donde el concepto solo para exposición |
(desde C++20) |
[editar] 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ébil para reflejar la expectativa de las implementaciones |
Se refuerzan los requisitos. |
[editar] 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. |