Namespaces
Variants

std::ranges:: views:: reverse, std::ranges:: reverse_view

From cppreference.net
Ranges library
Range adaptors
Definido en el encabezado <ranges>
template < ranges:: view V >

requires ranges:: bidirectional_range < V >
class reverse_view

: public ranges:: view_interface < reverse_view < V >>
(1) (desde C++20)
namespace views {

inline constexpr /* no especificado */ reverse = /* no especificado */ ;

}
(2) (desde C++20)
Firma de llamada
template < ranges:: viewable_range R >

requires /* ver más abajo */

constexpr ranges:: view auto reverse ( R && r ) ;
(desde C++20)
1) Un adaptador de rango que representa una vista del view subyacente con orden invertido.
2) RangeAdaptorObject . La expresión views :: reverse ( e ) es equivalente-expresión a una de las siguientes expresiones, excepto que e se evalúa solo una vez:
  • ranges:: subrange < I, I, K > ( e. end ( ) . base ( ) , e. begin ( ) . base ( ) , e. size ( ) ) , si K es ranges::subrange_kind::sized ;
  • en caso contrario ranges:: subrange < I, I, K > ( e. end ( ) . base ( ) , e. begin ( ) . base ( ) ) ;
  • en caso contrario ranges :: reverse_view { e } .
En otras palabras, views::reverse desenvuelve vistas invertidas cuando es posible.

Una reverse_view siempre modela bidirectional_range y common_range , y modela borrowed_range , sized_range , o random_access_range si el tipo de vista subyacente V modela el concepto correspondiente.

Contenidos

Miembros de datos

Miembro Descripción
V base_ (privado) la vista subyacente
( objeto miembro solo para exposición* )
non-propagating-cache < ranges:: iterator_t < V >> cached_end_ (privado)
(presente solo si V no satisface common_range )
un objeto que almacena en caché el resultado de llamadas a begin()
( objeto miembro solo para exposición* )

Funciones miembro

construye un reverse_view
(función miembro pública)
devuelve la vista subyacente V
(función miembro pública)
devuelve el iterador inicial del reverse_view
(función miembro pública)
devuelve el iterador final del reverse_view
(función miembro pública)
devuelve el tamaño de la vista si está acotada
(función miembro pública)
devuelve el tamaño aproximado del approximately_sized_range subyacente
(función miembro pública)
Heredado de std::ranges::view_interface
devuelve si la vista derivada está vacía, proporcionado solo si satisface sized_range o forward_range
(función miembro pública de std::ranges::view_interface<D> )
(C++23)
devuelve un iterador constante al inicio del rango
(función miembro pública de std::ranges::view_interface<D> )
(C++23)
devuelve un centinela para el iterador constante del rango
(función miembro pública de std::ranges::view_interface<D> )
devuelve si la vista derivada no está vacía, proporcionado solo si ranges::empty es aplicable a ella
(función miembro pública de std::ranges::view_interface<D> )
devuelve el primer elemento en la vista derivada, proporcionado si satisface forward_range
(función miembro pública de std::ranges::view_interface<D> )
devuelve el último elemento en la vista derivada, proporcionado solo si satisface bidirectional_range y common_range
(función miembro pública de std::ranges::view_interface<D> )
devuelve el elemento n ésimo en la vista derivada, proporcionado solo si satisface random_access_range
(función miembro pública de std::ranges::view_interface<D> )

std::ranges::reverse_view:: reverse_view

reverse_view ( ) requires std:: default_initializable < V > = default ;
(1) (since C++20)
constexpr reverse_view ( V r ) ;
(2) (since C++20)
1) Inicializa por valor base_  mediante su inicializador de miembro predeterminado ( = V ( ) ).
2) Inicializa base_  con std :: move ( r ) .

Parámetros

r - rango a invertir

std::ranges::reverse_view:: base

constexpr V base ( ) const & requires std:: copy_constructible < V > ;
(1) (since C++20)
constexpr V base ( ) && ;
(2) (since C++20)

Devuelve la vista subyacente.

1) Construye por copia el resultado desde la vista subyacente. Equivalente a return base_  ; .
2) Construye por movimiento el resultado desde la vista subyacente. Equivalente a return std :: move ( base_  ) ; .

std::ranges::reverse_view:: begin

constexpr std:: reverse_iterator < ranges:: iterator_t < V >> begin ( ) ;
(1) (desde C++20)
(2) (desde C++20)
constexpr auto begin ( ) const requires ranges:: common_range < const V > ;
(3) (desde C++20)
Para proporcionar la complejidad de tiempo constante amortizada requerida por el concepto range , esta función almacena en caché el resultado dentro del objeto de caché para su uso en llamadas posteriores.
2,3) Equivalente a return std:: make_reverse_iterator ( ranges:: end ( base_  ) ) ; .

std::ranges::reverse_view:: end

(1) (desde C++20)
constexpr auto end ( ) const requires ranges:: common_range < const V > ;
(2) (desde C++20)

Equivalente a return std:: make_reverse_iterator ( ranges:: begin ( base_  ) ) ; .

std::ranges::reverse_view:: size

constexpr auto size ( ) requires ranges:: sized_range < V > ;
(1) (desde C++20)
constexpr auto size ( ) const requires ranges:: sized_range < const V > ;
(2) (desde C++20)

Devuelve el tamaño de la vista si esta es acotada. Equivalente a return ranges:: size ( base_  ) ; .

std::ranges::as_rvalue_view:: reserve_hint

constexpr auto reserve_hint ( )
requires ranges :: approximately_sized_range < V > ;
(1) (desde C++26)
constexpr auto reserve_hint ( ) const
requires ranges :: approximately_sized_range < const V > ;
(2) (desde C++26)

Devuelve ranges :: reserve_hint ( base_  ) .

Guías de deducción

template < class R >
reverse_view ( R && ) - > reverse_view < views:: all_t < R >> ;
(desde C++20)

Plantillas auxiliares

template < class T >

constexpr bool enable_borrowed_range < std :: ranges :: reverse_view < T >> =

ranges:: enable_borrowed_range < T > ;
(desde C++20)

Esta especialización de std::ranges::enable_borrowed_range hace que reverse_view satisfaga borrowed_range cuando la vista subyacente la satisface.

Notas

Macro de prueba de características Valor Estándar Característica
__cpp_lib_ranges_reserve_hint 202502L (C++26) ranges::approximately_sized_range y reserve_hint

Ejemplo

#include <iostream>
#include <ranges>
int main()
{
    static constexpr auto il = {3, 1, 4, 1, 5, 9};
    std::ranges::reverse_view rv{il};
    for (int i : rv)
        std::cout << i << ' ';
    std::cout << '\n';
    for (int i : il | std::views::reverse)
        std::cout << i << ' ';
    std::cout << '\n';
    // operator[] is inherited from std::view_interface
    for (auto i{0U}; i != rv.size(); ++i)
        std::cout << rv[i] << ' ';
    std::cout << '\n';
}

Salida:

9 5 1 4 1 3
9 5 1 4 1 3
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 3494 C++20 reverse_view nunca fue un borrowed_range es un borrowed_range si su vista subyacente lo es

Véase también

adaptador de iterador para recorrido en orden inverso
(plantilla de clase)
invierte el orden de los elementos en un rango
(objeto función de algoritmo)
crea una copia de un rango que está invertido
(objeto función de algoritmo)