C++ named requirements: LegacyIterator
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
-
El tipo
Itsatisface CopyConstructible , y -
El tipo
Itsatisface CopyAssignable , y -
El tipo
Itsatisface Destructible , y -
El tipo
Itsatisface Swappable , y -
std::
iterator_traits
<
It
>
tiene typedefs miembro:
value_type, (hasta C++20)difference_type,reference,pointer, yiterator_category, y -
Dado
r
, un lvalue de tipo
It, las siguientes expresiones deben ser válidas y tener sus efectos especificados:
| 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) |
ConceptPara la definición de std::iterator_traits , se define el siguiente concepto de solo exposición.
donde el concepto de solo exposición
__Referenceable
<
T
>
se satisface si y solo si
T
&
es un tipo válido (en particular,
|
(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
|
- ↑ 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
|
(C++20)
|
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 |