C++ named requirements: LegacyBidirectionalIterator
Un LegacyBidirectionalIterator es un LegacyForwardIterator que puede moverse en ambas direcciones (es decir, incrementarse y decrementarse).
Si un
LegacyBidirectionalIterator
it
proviene de un
Container
, entonces el
value_type
de
it
es el mismo que el del contenedor, por lo que desreferenciar (
*
it
) obtiene el
value_type
del contenedor.
Contenidos |
Requisitos
El tipo
It
satisface
LegacyBidirectionalIterator
si
-
El tipo
Itsatisface LegacyForwardIterator
Y, dado
-
a
y
b
, lvalues de tipo
It -
reference, el tipo denotado por std:: iterator_traits < It > :: reference
Las siguientes expresiones deben ser válidas y tener sus efectos especificados:
| Expresión | Retorno | Expresión equivalente | Notas |
|---|---|---|---|
| -- a |
It&
|
Precondiciones:
Postcondiciones:
|
|
| a -- | convertible a const It & |
It temp
=
a
;
--
a
;
|
|
| * a -- |
reference
|
Un mutable LegacyBidirectionalIterator es un LegacyBidirectionalIterator que adicionalmente satisface los requisitos de LegacyOutputIterator .
Notas
El iterador de inicio no es decrementable y el comportamiento es indefinido si -- container. begin ( ) es evaluado.
Un iterador bidireccional no tiene que ser desreferenciable para ser decrementable (en particular, el iterador final no es desreferenciable pero es decrementable).
ConceptoPara la definición de std::iterator_traits , se define el siguiente concepto solo de exposición.
donde el concepto solo de exposición
|
(desde C++20) |
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
|
LWG 299
( N3066 ) |
C++98 |
el tipo de retorno de
*
a
--
debía ser
convertible a
T
|
se cambió el tipo de
retorno a
reference
[1]
|
| LWG 383 | C++98 | b debía ser dereferenciable después de -- a | a debe ser dereferenciable en su lugar |
|
LWG 1212
( N3066 ) |
C++98 |
el tipo de retorno de
*
a
--
no coincidía con el tipo
de retorno de * a ++ requerido por LegacyForwardIterator |
se cambió el tipo de
retorno a
reference
|
- ↑ Este problema fue inicialmente resuelto por N2758 (conceptos de iteradores), que posteriormente fue eliminado del estándar de C++.
Véase también
|
(C++20)
|
especifica que un
forward_iterator
es un iterador bidireccional, que admite movimiento hacia atrás
(concepto) |
| Biblioteca de iteradores | proporciona definiciones para iteradores, rasgos de iteradores, adaptadores y funciones de utilidad |