Namespaces
Variants

C++ named requirements: LegacyBidirectionalIterator

From cppreference.net
C++ named requirements

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

Y, dado

Las siguientes expresiones deben ser válidas y tener sus efectos especificados:

Expresión Retorno Expresión equivalente Notas
-- a It& Precondiciones:
  • a es decrementable (existe tal b que a == ++ b )

Postcondiciones:

  • a es dereferenciable
  • -- ( ++ a ) == a
  • Si -- a == -- b entonces a == b
  • a y -- a designan el mismo objeto iterador
a -- convertible a const It & It temp = a ;

-- a ;

return temp ;
* 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).

Concepto

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

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 de exposición __LegacyForwardIterator se describe en LegacyForwardIterator .

(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
  1. Este problema fue inicialmente resuelto por N2758 (conceptos de iteradores), que posteriormente fue eliminado del estándar de C++.

Véase también

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