C++ named requirements: ReversibleContainer
Un ReversibleContainer es un Container que posee iteradores que cumplen con los requisitos de LegacyBidirectionalIterator o LegacyRandomAccessIterator . Estos iteradores permiten que un ReversibleContainer sea recorrido en orden inverso.
Contenidos |
Requisitos
Un tipo satisface ReversibleContainer si satisface Container , su tipo de iterador pertenece a las categorías de iteradores bidireccionales o de acceso aleatorio iterator categories y, dados los siguientes tipos y valores, se cumplen los requisitos semánticos y de complejidad en las tablas siguientes:
| Tipo | Definición |
X
|
un tipo ReversibleContainer |
T
|
el
value_type
de
X
|
| Valor | Definición |
| a |
un valor de tipo
X
|
Tipos
| Nombre | Tipo | Requisitos |
|---|---|---|
| typename X :: reverse_iterator | std:: reverse_iterator < X :: iterator > |
un tipo de iterador cuyo
tipo de valor
es
T
|
| typename X :: const_reverse_iterator | std:: reverse_iterator < X :: const_iterator > |
un tipo de iterador constante cuyo
tipo de valor
es
T
|
Expresiones
Los tipos
reverse_iterator
y
const_reverse_iterator
en la siguiente tabla denotan
typename
X
::
reverse_iterator
y
typename
X
::
const_reverse_iterator
respectivamente.
| Expresión | Tipo | Semántica | Complejidad |
|---|---|---|---|
| a. rbegin ( ) |
reverse_iterator
const_reverse_iterator
para constante
a
|
reverse_iterator ( a. end ( ) ) | Constante |
| a. rend ( ) |
reverse_iterator
const_reverse_iterator
para constante
a
|
reverse_iterator ( a. begin ( ) ) | Constante |
| a. crbegin ( ) |
const_reverse_iterator
|
const_cast < const X & > ( a ) . rbegin ( ) | Constante |
| a. crend ( ) |
const_reverse_iterator
|
const_cast < const X & > ( a ) . rend ( ) | Constante |
Tipos de biblioteca
Los siguientes tipos de la biblioteca estándar satisfacen ReversibleContainer requisitos:
|
(C++11)
|
array contiguo in situ de tamaño fijo
(plantilla de clase) |
|
cola de doble extremo
(plantilla de clase) |
|
|
lista doblemente enlazada
(plantilla de clase) |
|
|
array contiguo redimensionable
(plantilla de clase) |
|
|
(C++26)
|
array contiguo in situ redimensionable con capacidad fija
(plantilla de clase) |
|
colección de pares clave-valor, ordenados por claves, claves únicas
(plantilla de clase) |
|
|
colección de pares clave-valor, ordenados por claves
(plantilla de clase) |
|
|
colección de claves únicas, ordenadas por claves
(plantilla de clase) |
|
|
colección de claves, ordenadas por claves
(plantilla de clase) |
Ejemplo
El siguiente ejemplo itera sobre un vector (que tiene iteradores de acceso aleatorio legacy ) en orden inverso.
#include <iostream> #include <vector> int main() { std::vector<int> v = {3, 1, 4, 1, 5, 9}; for (std::vector<int>::const_reverse_iterator i{v.crbegin()}; i != v.crend(); ++i) std::cout << *i << ' '; std::cout << '\n'; }
Salida:
9 5 1 4 1 3
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 2105 | C++98 | typename X :: const_reverse_iterator se requería que fuera un tipo de iterador de tipo de valor const T |
se requiere que sea un tipo de
iterador constante de tipo de valor
T
|