std::ranges::owning_view
Definido en el archivo de encabezado <ranges> | ||
template<ranges::range R> requires std::movable<R>&&(!/*es-lista-de-inicializadores*/<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 | |
(C++20) | 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> ) |
(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> ) |
(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> ) |
(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> ) |
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) |
other
.t
.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) |
other
.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.
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>>= | (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
(C++20) | Una vista (view ) de los elementos de algún otro rango (range ). (plantilla de clase) |
(C++20) | Una vista (view ) que incluye todos los elementos de un rango (range ). (plantilla de alias)(objeto adaptador de rango) |