Espacios de nombres
Variantes
Acciones

std::ranges::owning_view

De cppreference.com
< cpp‎ | ranges
 
 
Biblioteca de rangos
Adaptadores de rangos
 
Definido en el archivo de encabezado <ranges>
template<ranges::range R>

    requires std::movable<R>&&(!/*es-lista-de-inicializadores*/<R>)

class owning_view :publicranges::view_interface<owning_view<R>>
(desde C++20)

owning_view es una vista (view) que tiene propiedad única de un rango (range). Es de solo movimiento y almacena ese rango (range) dentro de ella..

La constante /*es-lista-de-inicializadores*/<R> en la clúsula requires es true si y solo si std::remove_cvref_t<R> es una especialización de std::initializer_list.

Contenido

[editar]Datos miembro

Las implementaciones típicas de owning_view solo tienen un dato miembro no estático: el rango subyacente de tipo R. El miembro aquí se muestra como r_ (el nombre es solo de exposición).

[editar]Funciones miembro

(constructor)
(C++20)
Construye un objeto owning_view inicializando por valor o por movimiento el rango almacenado.
(función miembro pública)
operator=
(C++20)
Asigna por movimiento el rango almacenado.
(función miembro pública)
base
(C++20)
Devuelve una referencia al rango almacenado.
(función miembro pública)
begin
(C++20)
Devuelve el iterador al comienzo del rango almacenado.
(función miembro pública)
end
(C++20)
Devuelve el centinela del rango almacenado.
(función miembro pública)
empty
(C++20)
Verifica si el rango almacenado está vacío.
(función miembro pública)
size
(C++20)
Devuelve el tamaño del sized_range almacenado.
(función miembro pública)
data
(C++20)
Devuelve el puntero al comienzo del contiguous_range almacenado.
(función miembro pública)
Heredadas de std::ranges::view_interface
Devuelve si la vista derivada está vacía o no. Se proporciona si ranges::empty le es aplicable.
(función miembro pública de std::ranges::view_interface<D>)[editar]
(C++20)
Devuelve el primer elemento en la vista derivada. Se proporciona si la vista derivada satisface forward_range.
(función miembro pública de std::ranges::view_interface<D>)[editar]
(C++20)
Devuelve el último elemento en una vista derivada. Se proporciona si la vista derivada satisface bidirectional_range y common_range.
(función miembro pública de std::ranges::view_interface<D>)[editar]
(C++20)
Devuelve el enésimo elemento en la vista derivada. Se proporciona si la vista derivada satisface random_access_range.
(función miembro pública de std::ranges::view_interface<D>)[editar]

std::ranges::owning_view::owning_view

owning_view() requires std::default_initializable<R>=default;
(1) (desde C++20)
owning_view( owning_view&& other )=default;
(2) (desde C++20)
constexpr owning_view( R&& t );
(3) (desde C++20)
owning_view(const owning_view&)= delete;
(4) (desde C++20)
1) Constructor por defecto. Inicializa por valor el rango almacenado mediante su inicializador de miembro por defecto (= R()).
2) Constructor de movimiento. Construye por movimiento el rango almacenado a partir de other.
3) Construye por movimiento el rango almacenado a partir de t.
4) El constructor de copia está eliminado. owning_view es de solo movimiento.

Parámetros

other - La otra vista owning_view de la que mover.
t - El rango del que mover.

std::ranges::owning_view::operator=

owning_view& operator=( owning_view&& other )=default;
(1) (desde C++20)
owning_view& operator=(const owning_view&)= delete;
(2) (desde C++20)
1) Operador de asignación de movimiento. Asigna por movimiento el rango almacenado a partir de other.
2) El operador de asignación de copia está eliminado. owning_view es de solo movimiento.

Parámetros

other - La otra vista owning_view de la que mover.

Valor de retorno

*this.

std::ranges::owning_view::base

constexpr R& base()&noexcept;
(1) (desde C++20)
constexprconst R& base()const&noexcept;
(2) (desde C++20)
constexpr R&& base()&&noexcept;
(3) (desde C++20)
constexprconst 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.

1-2) Equivalente a return r_;.
3-4) Equivalente a return std::move(r_);.

std::ranges::owning_view::begin

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

Equivalente a returnranges::begin(r_);.

std::ranges::owning_view::end

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

Equivalente a returnranges::end(r_);.

std::ranges::owning_view::empty

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

Equivalente a returnranges::empty(r_);.

std::ranges::owning_view::size

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

Equivalente a returnranges::size(r_);.

std::ranges::owning_view::data

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

Equivalente a returnranges::data(r_);.

[editar]Plantillas auxiliares

template<class T>

inlineconstexprbool enable_borrowed_range<std::ranges::owning_view<T>>=

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

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

[editar]Ejemplo

#include <ranges>#include <string>#include <cassert>#include <iostream>   int main(){usingnamespace std::literals; std::ranges::owning_view ov{"cosmos"s };// el tipo deducido de R es std::string;// `ov` es el único dueño de esta cadenastd::cout<<std::boolalpha<<"llamada a empty()  : "<< ov.empty()<<'\n'<<"llamada a size()  : "<< ov.size()<<'\n'<<"llamada a front()  : "<< ov.front()<<'\n'// lo mismo que *(ov.begin())<<"llamada a back()  : "<< ov.back()<<'\n'// igual a *(ov.end()-1)<<"llamada a data()  : "<< ov.data()<<'\n'<<"llamada a base()  : "<< ov.base().size()<<'\n'// ~> ov.size()<<"sizeof(ov)  : "<< sizeof(ov)<<'\n'// típicamente igual a sizeof(R)<<"for basado en rango : \"";   for(constchar c: ov)std::cout<< c;std::cout<<"\"\n";   std::ranges::owning_view<std::string> ov2;assert(ov2.empty());// ov2 = ov; // ERROR: el operador de asignacón de copia está eliminado ov2 = std::move(ov);// de acuerdoassert(ov.empty());assert(ov2.size()==6);}

Posible salida:

llamada a empty()  : false llamada a size()  : 6 llamada a front()  : c llamada a back()  : s llamada a data()  : cosmos llamada a base()  : 6 sizeof(ov)  : 32 for basado en rango : "cosmos"

[editar]Véase también

Una vista (view) de los elementos de algún otro rango (range).
(plantilla de clase)[editar]
Una vista (view) que incluye todos los elementos de un rango (range).
(plantilla de alias)(objeto adaptador de rango)[editar]
close