Namespaces
Variants

std::ranges:: owning_view

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

requires std:: movable < R > && ( ! /*is-initializer-list*/ < R > )
class owning_view

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

owning_view es una view que tiene propiedad única de un range . Es de solo movimiento y almacena ese range dentro de sí.

La constante /*is-initializer-list*/ < R > en la cláusula requires es true si y solo si std:: remove_cvref_t < R > es una especialización de std::initializer_list .

Contenidos

Miembros de datos

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

Funciones miembro

construye un owning_view inicializando por valor o construyendo por movimiento el rango almacenado
(función miembro pública)
asigna por movimiento el rango almacenado
(función miembro pública)
devuelve una referencia al rango almacenado
(función miembro pública)
devuelve el iterador inicial del rango almacenado
(función miembro pública)
devuelve el centinela del rango almacenado
(función miembro pública)
comprueba si el rango almacenado está vacío
(función miembro pública)
devuelve el tamaño del sized_range almacenado
(función miembro pública)
devuelve el tamaño aproximado del approximately_sized_range almacenado
(función miembro pública)
devuelve el puntero al inicio del contiguous_range almacenado
(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::owning_view:: owning_view

owning_view ( ) requires std:: default_initializable < R > = default ;
(1) (since C++20)
owning_view ( owning_view && other ) = default ;
(2) (since C++20)
constexpr owning_view ( R && t ) ;
(3) (since C++20)
1) Constructor por defecto. Inicializa por valor r_ mediante su inicializador de miembro por defecto ( = R ( ) ).
2) Constructor de movimiento. Construye por movimiento r_ a partir del de other .
3) Construye por movimiento r_ a partir de t .

Parámetros

other - otro owning_view del cual mover
t - rango del cual mover

Notas

owning_view no define explícitamente un constructor de copia. owning_view es solo de movimiento.

std::ranges::owning_view:: operator=

owning_view & operator = ( owning_view && other ) = default ;
(desde C++20)

Operador de asignación de movimiento. Asigna por movimiento r_ desde el de other .

Parámetros

other - otro owning_view desde el cual mover

Valor de retorno

* this

Notas

owning_view no define explícitamente un operador de asignación por copia. owning_view es solo de movimiento.

std::ranges::owning_view:: base

constexpr R & base ( ) & noexcept ;
(1) (desde C++20)
constexpr const R & base ( ) const & noexcept ;
(2) (desde C++20)
constexpr R && base ( ) && noexcept ;
(3) (desde C++20)
constexpr const R && base ( ) const && noexcept ;
(4) (desde C++20)

Devuelve una referencia al rango almacenado, manteniendo la categoría de valor y la calificación const.

Valor de retorno

1,2) r_
3,4) std :: move ( r_  )

std::ranges::owning_view:: begin

constexpr ranges:: iterator_t < R > begin ( ) ;
(1) (desde C++20)
constexpr auto begin ( ) const requires ranges:: range < const R > ;
(2) (desde C++20)

Devuelve ranges:: begin ( r_  ) .

std::ranges::owning_view:: end

constexpr ranges:: sentinel_t < R > end ( ) ;
(1) (desde C++20)
constexpr auto end ( ) const requires ranges:: range < const R > ;
(2) (desde C++20)

Devuelve ranges:: end ( r_  ) .

std::ranges::owning_view:: empty

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

Devuelve ranges:: empty ( r_  ) .

std::ranges::owning_view:: size

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

Devuelve ranges:: size ( r_  ) .

std::ranges::owning_view:: reserve_hint

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

Devuelve ranges :: reserve_hint ( r_  ) .

std::ranges::owning_view:: data

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

Devuelve ranges:: data ( r_  ) .

Plantillas auxiliares

template < class T >

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

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

Esta especialización de ranges:: enable_borrowed_range hace que owning_view satisfaga borrowed_range cuando el rango subyacente lo satisface.

Notas

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

Ejemplo

#include <cassert>
#include <iostream>
#include <ranges>
#include <string>
int main()
{
    using namespace std::literals;
    std::ranges::owning_view ov{"cosmos"s}; // el tipo deducido de R es std::string;
                                            // "ov" es el único propietario de este string
    assert(
        ov.empty() == false &&
        ov.size() == 6 &&
        ov.size() == ov.base().size() &&
        ov.front() == 'c' &&
        ov.front() == *ov.begin() &&
        ov.back() == 's' &&
        ov.back() == *(ov.end() - 1) &&
        ov.data() == ov.base()
    );
    std::cout << "sizeof(ov): " << sizeof ov << '\n' // típicamente igual a sizeof(R)
              << "range-for: ";
    for (const char ch : ov)
        std::cout << ch;
    std::cout << '\n';
    std::ranges::owning_view<std::string> ov2;
    assert(ov2.empty());
//  ov2 = ov; // error en tiempo de compilación: el operador de asignación por copia está eliminado
    ov2 = std::move(ov); // OK
    assert(ov2.size() == 6);
}

Salida posible:

sizeof(ov): 32
range-for: cosmos

Véase también

una view de los elementos de algún otro range
(plantilla de clase)
una view que incluye todos los elementos de un range
(plantilla de alias) (objeto adaptador de rango)