Namespaces
Variants

std::ranges:: ref_view

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

requires std:: is_object_v < R >
class ref_view

: public ranges:: view_interface < ref_view < R >>
(desde C++20)

ref_view es una view de los elementos de algún otro range . Envuelve una referencia a ese range .

Contenidos

Miembros de datos

Miembro Descripción
R* r_ un puntero al rango subyacente
( objeto miembro solo para exposición* )

Funciones miembro

construye un ref_view que referencia al rango dado
(función miembro pública)
devuelve las referencias al rango referenciado
(función miembro pública)
devuelve el iterador inicial del rango referenciado
(función miembro pública)
devuelve el centinela del rango referenciado
(función miembro pública)
comprueba si el rango referenciado está vacío
(función miembro pública)
devuelve el tamaño del sized_range referenciado
(función miembro pública)
devuelve el tamaño aproximado del approximately_sized_range referenciado
(función miembro pública)
devuelve el puntero al inicio del contiguous_range referenciado
(función miembro pública)
Heredado de std::ranges::view_interface
(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::ref_view:: ref_view

template < /*different-from*/ < ref_view > T >

requires std:: convertible_to < T, R & > &&
requires { _FUN ( std:: declval < T > ( ) ) ; }

constexpr ref_view ( T && t ) ;
(desde C++20)

Inicializa r_ con std:: addressof ( static_cast < R & > ( std:: forward < T > ( t ) ) ) .

/*different-from*/ < T, U > se satisface si y solo si std:: remove_cvref_t < T > y std:: remove_cvref_t < U > no son el mismo tipo, y las sobrecargas de _FUN se declaran como void _FUN ( R & ) ; void _FUN ( R && ) = delete ; .

Parámetros

t - rango a referenciar

std::ranges::ref_view:: base

constexpr R & base ( ) const ;
(desde C++20)

Devuelve * r_ .

std::ranges::ref_view:: begin

constexpr ranges:: iterator_t < R > begin ( ) const ;
(desde C++20)

Devuelve ranges:: begin ( * r_  ) .

std::ranges::ref_view:: end

constexpr ranges:: sentinel_t < R > end ( ) const ;
(desde C++20)

Devuelve ranges:: end ( * r_  ) .

std::ranges::ref_view:: empty

constexpr bool empty ( ) const
requires requires { ranges:: empty ( * r_ ) ; } ;
(desde C++20)

Devuelve ranges:: empty ( * r_  ) .

std::ranges::ref_view:: size

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

Devuelve ranges:: size ( * r_  ) .

std::ranges::ref_view:: reserve_hint

constexpr auto size ( ) const
requires ranges :: approximately_sized_range < R > ;
(desde C++26)

Devuelve ranges :: reserve_hint ( * r_  ) .

std::ranges::ref_view:: data

constexpr auto data ( ) const
requires ranges:: contiguous_range < R > ;
(desde C++20)

Devuelve ranges:: data ( * r_  ) .

Guías de deducción

template < class R >
ref_view ( R & ) - > ref_view < R > ;
(desde C++20)

Plantillas auxiliares

template < class T >
constexpr bool enable_borrowed_range < ranges :: ref_view < T >> = true ;
(desde C++20)

Esta especialización de std::ranges::enable_borrowed_range hace que ref_view satisfaga borrowed_range .

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()
{
    const std::string s{"cosmos"};
    const std::ranges::take_view tv{s, 3};
    const std::ranges::ref_view rv{tv};
    std::cout
        << std::boolalpha
        << "call empty(): " << rv.empty() << '\n'
        << "call size() : " << rv.size() << '\n'
        << "call begin(): " << *rv.begin() << '\n'
        << "call end()  : " << *(rv.end() - 1) << '\n'
        << "call data() : " << rv.data() << '\n'
        << "call base() : " << rv.base().size() << '\n' // ~> tv.size()
        << "range-for   : ";
    for (const auto c : rv)
        std::cout << c;
    std::cout << '\n';
}

Salida:

call empty(): false
call size() : 3
call begin(): c
call end()  : s
call data() : cosmos
call base() : 3
range-for   : cos

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
P2325R3 C++20 el constructor por defecto se proporcionaba como
view debe ser default_initializable
eliminado junto con el requisito

Véase también

CopyConstructible y CopyAssignable envoltorio de referencia
(plantilla de clase)
una view con propiedad exclusiva de algún range
(plantilla de clase)
una view que incluye todos los elementos de un range
(plantilla de alias) (objeto adaptador de rango)