Requisitos denominados de C++: BidirectionalIterator
Un IteradorBidireccionalLegado es un IteradorDeAvanceLegado que puede moverse en ambas direcciones (p. ej., incrementando y decrementando).
Si un IteradorBidireccionalLegado it se origina en un Contenedor, entonces el value_type de it es el mismo que el del contenedor, por lo que al desreferenciar (*it) se obtiene el value_type del contenedor.
Requisitos
El tipo It satisface a IteradorBidireccionalLegado si
- El tipo
Itsatisface a IteradorDeAvanceLegado
Y, dado
ayb, l-valores de tipoItreference,el tipo denotado porstd::iterator_traits<It>::reference
Las siguientes expresiones deben ser válidas y tener sus efectos especificados:
| Expresión | Tipo de retorno | Expresión equivalente | Notas |
|---|---|---|---|
--a |
It& |
Precondiciones:
Poscondiciones:
| |
a-- |
convertible a const It& |
It temp = a; --a; return temp; |
|
*a-- |
reference |
Un IteradorBidireccionalLegado mutable es un IteradorBidireccionalLegado que además satisface los requisitos de IteradorDeSalidaLegado.
Notas
El iterador de inicio (begin) no es decrementable y el comportamiento es indefinido si se evalúa --container.begin().
Un iterador bidireccional no tiene que ser desreferenciable para ser decrementable (en particular, el iterador final (end) no es desreferenciable pero es decrementable).
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 |
|---|---|---|---|
| N3066 | C++98 | se requería que el tipo de de retorno *a-- fuera convertible a T
|
cambiado el tipo de retorno a reference[1]
|
| LWG 383 | C++98 | se requería que b fuera desreferenciable después de --a
|
se requiere que a seadesreferenciable en su lugar |
| N3066 | C++98 | el tipo de retorno de *a--no coincide con el tipode retorno de *a++ requerido por IteradorDeAvanceLegado
|
cambió el tipo de retorno a reference
|
Véase también
(C++20) |
especifica que un forward_iterator es un iterador bidireccional, soportando movimiento hacía atrás (concepto) |
| Biblioteca de iteradores | Proporciona definiciones para iteradores, rasgos de iteradores, adaptadores y funciones de servicio. |