Espacios de nombres
Variantes

Requisitos denominados de C++: BidirectionalIterator

De cppreference.com
 
 
Requisitos denominados de C++
Números aleatorios
Concurrencia
(C++11)
(C++11)
Rangos
Vista multidimensional
Otros

 

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

Y, dado

  • a y b, l-valores 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 Tipo de retorno Expresión equivalente Notas
--a It& Precondiciones:
  • a es decrementable (existe una b tal que a == ++b)

Poscondiciones:

  • a es desreferenciable
  • --(++a) == a
  • Si --a == --b entonces a == b
  • a y --a designan el mismo objeto de iterador
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).

Concepto

Para la definición de std::iterator_traits, se define el siguiente concepto solo para exposición.

<tbody> </tbody>
template<class I> concept __LegacyBidirectionalIterator = __LegacyForwardIterator<I> && requires(I i) { { --i } -> std::same_as<I&>; { i-- } -> std::convertible_to<const I&>; { *i-- } -> std::same_as<std::iter_reference_t<I>>; };

donde el concepto solo para exposición __LegacyForwardIterator se describe en IteradorDeAvanceLegado.

(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 sea
desreferenciable en su lugar
N3066 C++98 el tipo de retorno de *a--no coincide con el tipo
de retorno de *a++ requerido por IteradorDeAvanceLegado
cambió el tipo
de retorno a reference
  1. Este problema se resolvió inicialmente con N2758 (conceptos de iterador), que luego se eliminó del estándar de C++.

Véase también

especifica que un forward_iterator es un iterador bidireccional, soportando movimiento hacía atrás
(concepto) [editar]
Biblioteca de iteradores Proporciona definiciones para iteradores, rasgos de iteradores, adaptadores y funciones de servicio.