Namespaces
Variants

C++ named requirements: ReversibleContainer

From cppreference.net
C++ named requirements

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)
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