std::ranges::owning_view - cppreference.com
De cppreference.com
| Definido en el archivo de encabezado |
||
|
|
(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.
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).
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 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>) [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
|
|
(1) | (desde C++20) |
|
|
(2) | (desde C++20) |
|
|
(3) | (desde C++20) |
|
|
(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=
|
|
(1) | (desde C++20) |
|
|
(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
|
|
(1) | (desde C++20) |
|
|
(2) | (desde C++20) |
|
|
(3) | (desde C++20) |
|
|
(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
|
|
(1) | (desde C++20) |
|
|
(2) | (desde C++20) |
Equivalente a return ranges::begin(r_);.
std::ranges::owning_view::end
|
|
(1) | (desde C++20) |
|
|
(2) | (desde C++20) |
Equivalente a return ranges::end(r_);.
std::ranges::owning_view::empty
|
|
(1) | (desde C++20) |
|
|
(2) | (desde C++20) |
Equivalente a return ranges::empty(r_);.
std::ranges::owning_view::size
|
|
(1) | (desde C++20) |
|
|
(2) | (desde C++20) |
Equivalente a return ranges::size(r_);.
std::ranges::owning_view::data
|
|
(1) | (desde C++20) |
|
|
(2) | (desde C++20) |
Equivalente a return ranges::data(r_);.
Plantillas auxiliares
|
|
(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.
Ejemplo
#include <ranges> #include <string> #include <cassert> #include <iostream> 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 dueño de esta cadena std::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 (const char 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 acuerdo assert(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"