Namespaces
Variants

C++ named requirements: LegacyIterator

From cppreference.net
C++ named requirements

Los LegacyIterator requisitos describen tipos que pueden utilizarse para identificar y recorrer los elementos de un contenedor.

LegacyIterator es el conjunto base de requisitos utilizado por otros tipos de iteradores: LegacyInputIterator , LegacyOutputIterator , LegacyForwardIterator , LegacyBidirectionalIterator , y LegacyRandomAccessIterator . Los iteradores pueden considerarse como una abstracción de los punteros.

Todas las categorías de iteradores requieren únicamente aquellas funciones que son realizables para una categoría dada en tiempo constante (amortizado). Por lo tanto, las tablas de requisitos y definiciones de conceptos (since C++20) para los iteradores no especifican complejidad.

Contenidos

Requisitos

El tipo It satisface LegacyIterator si

Expresión Tipo de Retorno Precondición
* r no especificado r es dereferenciable
++ r It & r es incrementable (el comportamiento de la expresión ++ r está definido)

Concept

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

template < class I >

concept __LegacyIterator =
requires ( I i )
{
{ * i } - > __Referenceable ;
{ ++ i } - > std:: same_as < I & > ;
{ * i ++ } - > __Referenceable ;

} && std:: copyable < I > ;

donde el concepto de solo exposición __Referenceable < T > se satisface si y solo si T & es un tipo válido (en particular, T no debe ser void ).

(desde C++20)

Notas

Nota sobre terminología: La siguiente tabla muestra los nombres utilizados en este sitio y los nombres correspondientes del Estándar C++ (con el mismo significado). El prefijo "Legacy" (y "Cpp17") enfatiza la compatibilidad con estándares anteriores a C++20 y se utiliza para distinguir estos requisitos de los nuevos conceptos de iterador introducidos con C++20.

Nombres de cppreference Nombres del Estándar C++ Conceptos de iteradores C++20
LegacyIterator Cpp17Iterator input_or_output_iterator
LegacyInputIterator Cpp17InputIterator input_iterator
LegacyOutputIterator Cpp17OutputIterator output_iterator
LegacyForwardIterator Cpp17ForwardIterator forward_iterator
LegacyBidirectionalIterator Cpp17BidirectionalIterator bidirectional_iterator
LegacyRandomAccessIterator Cpp17RandomAccessIterator random_access_iterator
LegacyContiguousIterator [1] contiguous_iterator
  1. LegacyContiguousIterator se especificó formalmente solo en C++17, pero los iteradores de std::vector , std::basic_string , std::array , y std::valarray , así como los punteros a arrays de C a menudo se trataban como una categoría separada en código pre-C++17.

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 2437 C++98 * r se requiere que sea reference no requerido para iteradores de salida
LWG 3420 C++20 el concepto de solo exposición verifica copyable primero copyable se verifica solo si la expresión requires produce true

Véase también

especifica que los objetos de un tipo pueden ser incrementados y desreferenciados
(concepto)
Biblioteca de iteradores proporciona definiciones para iteradores, rasgos de iteradores, adaptadores y funciones de utilidad