Compartir a través de


reverse_view (Clase, Biblioteca estándar de C++)

Vista de los elementos de un intervalo en orden inverso.

Sintaxis

template<ranges::view V>
requires ranges::bidirectional_range<V>
class reverse_view : public ranges::view_interface<reverse_view<V>>;

Parámetros de plantilla

V
Tipo de la vista subyacente.
Este tipo debe satisfacer ranges::bidirectional_range.

Características de la vista

Para obtener una descripción de las siguientes entradas, vea View class characteristics (Ver características de clase).

Característica Descripción
Adaptador de rango views::reverse
Intervalo subyacente Debe satisfacer bidirectional_range hasta random_access_range
Tipo de elemento Igual que el intervalo subyacente
Ver categoría de iterador Igual que el intervalo subyacente
Tamaño Solo si el intervalo subyacente cumple sized_range
Es const-iterable Solo si el intervalo subyacente es y common_view satisface const-iterable
Rango común
Intervalo prestado Solo si el intervalo subyacente cumple borrowed_range

Miembros

Funciones miembro Descripción
ConstructoresC++20 Construya un elemento reverse_view.
baseC++20 Obtenga el intervalo subyacente.
beginC++20 Obtenga un iterador al primer elemento.
endC++20 Obtenga el centinela al final de .reverse_view
sizeC++20 Obtiene el número de elementos.
Heredado de view_interface Descripción
backC++20 Obtenga el último elemento.
emptyC++20 Comprueba si el objeto reverse_view está vacío.
frontC++20 Obtiene el primer elemento.
operator[]C++20 Obtiene el elemento que se encuentra en la posición especificada.
operator boolC++20 Compruebe si reverse_view no está vacío.

Requisitos

Encabezado: <ranges> (desde C++20)

Espacio de nombres: std::ranges

Opción del compilador: /std:c++20 o posterior es necesaria.

Constructores

Construya una instancia de a reverse_view partir de una vista bidireccional.

1) reverse_view() requires default_initializable<V> = default; // default-constructs the underlying view
2) constexpr explicit reverse_view(V rg); // initializes the underlying view via std::move(r)

Parámetros

rg
Vista de la que se va a proporcionar una vista invertida.

Para obtener información sobre el tipo de parámetro de plantilla, consulte Parámetros de plantilla.

Valor devuelto

Vista del intervalo subyacente, en orden inverso.

Comentarios

La mejor manera de crear un reverse_view es usar el adaptador de views::reverse rango. Los adaptadores de rango son la manera prevista de crear clases de vista. Los tipos de vista se exponen en caso de que desee crear su propio tipo de vista personalizado.

1) El constructor predeterminado inicializa un reverse_view.
2) Cree un a reverse_view partir de la vista especificada.

Ejemplo: reverse_view

// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v{0, 1, 2, 3, -4, 5, 6};
    auto rv = v | std::views::reverse;
    
    for (auto e : rv) // 6 5 -4 3 2 1 0
    {
        std::cout << e << ' ';
    }
}
6 5 -4 3 2 1 0

base

Obtiene una copia de la vista subyacente.

// Uses a copy constructor to return the underlying view
constexpr V base() const& requires std::copy_constructible<V>;

// Uses a move constructor to return the underlying view
constexpr V base() &&;

Parámetros

Ninguno.

Valor devuelto

Vista subyacente.

begin

Obtenga un iterador al primer elemento de .reverse_view

1) constexpr reverse_iterator<iterator_t<V>> begin();
2) constexpr reverse_iterator<iterator_t<V>> begin() requires common_range<V>;
3) constexpr auto begin() const requires common_range<const V>;

Parámetros

Ninguno.

Valor devuelto

Iterador que apunta al primer elemento de reverse_view.

Imagen de un vector con los elementos 10, 20 y 30. El primer elemento contiene 10 y se etiqueta begin(). El último elemento contiene 30 y se etiqueta como

Comentarios

Después de la primera llamada a begin(), las llamadas posteriores se ejecutan en tiempo constante, O(1), independientemente de cuántos elementos estén en .reverse_view Esto tiene implicaciones porque reverse_view almacena en caché el valor de last para que pueda devolverlo repetidamente de begin. Esto significa que no debe reutilizar una vista después de modificar el contenedor subyacente. Si se modifica el intervalo subyacente, genere una nueva vista, que es económica.

2) La vista subyacente debe satisfacer common_range, lo que significa que la vista subyacente debe tener el mismo tipo de iterador inicial y final.
3) La vista subyacente debe satisfacer common_range para una vista const para iterar sobre un const reverse_view.

end

Obtención del centinela al final del reverse_view

1) constexpr reverse_iterator<iterator_t<V>> end();
2) constexpr auto end() const requires common_range<const V>;

Parámetros

Ninguno.

Valor devuelto

Sentinel que sigue al último elemento de .reverse_view

Imagen de un vector con los elementos 10, 20 y 30. El primer elemento contiene 10 y se etiqueta begin(). El último elemento contiene 30 y se etiqueta como

Comentarios

Para 2, la vista subyacente debe satisfacer common_range para una vista const, lo que significa que la vista subyacente debe tener el mismo tipo de iterador inicial y final.

size

Obtiene el número de elementos.

constexpr auto size() requires ranges::sized_range<V>;
constexpr auto size() const requires ranges::sized_range<const V>;

Parámetros

Ninguno.

Valor devuelto

Número de elementos incluidos en reverse_view.

Comentarios

El tamaño de la vista solo está disponible si el intervalo subyacente es , sized_rangeo en otras palabras, limitado.

Consulte también

<ranges>
reverse adaptador de rango
Ver clases