std::ranges::views::elements, std::ranges::elements_view
| Definido en el encabezado <ranges>
|
||
template< ranges::input_range V, std::size_t N >
requires ranges::view<V> &&
/*has-tuple-element*/<ranges::range_value_t<V>, N> &&
/*has-tuple-element*/<std::remove_reference_t<
ranges::range_reference_t<V>>, N> &&
/*returnable-element*/<ranges::range_reference_t<V>, N>
class elements_view
: public ranges::view_interface<elements_view<V, N>>;
|
(1) | (desde C++20) |
namespace views {
template< std::size_t N >
constexpr /* unspecified */ elements = /* unspecified */;
}
|
(2) | (desde C++20) |
| Firma de llamada |
||
template< ranges::viewable_range R >
requires /* see below */
constexpr ranges::view auto elements<N>( R&& r );
|
(desde C++20) | |
| Conceptos auxiliares |
||
template< class T, std::size_t N >
concept /*has-tuple-element*/ =
requires(T t) {
typename std::tuple_size<T>::type;
requires N < std::tuple_size_v<T>;
typename std::tuple_element_t<N, T>;
{ std::get<N>(t) } -> std::convertible_to<
const std::tuple_element_t<N, T>&>;
};
|
(3) | (hasta C++23) (solo exposición*) |
template< class T, std::size_t N >
concept /*has-tuple-element*/ =
/*tuple-like*/<T> && N < std::tuple_size_v<T>
|
(desde C++23) (solo exposición*) |
|
template< class T, std::size_t N >
concept returnable-element =
std::is_reference_v<T> || std::move_constructible<
std::tuple_element_t<N, T>>;
|
(4) | (solo exposición*) |
N-ésimo elemento del tipo de valor de la vista adaptada.views::elements es un RangeAdaptorObject. La expresión views::elements<M>(e) es equivalente en expresión a elements_view<views::all_t<decltype((e))>, M>{e} para cualquier subexpresión adecuada e y expresión constante M.elements_view modela los conceptos random_access_range, bidirectional_range, forward_range, input_range, common_range, y sized_range cuando la vista subyacente V modela los conceptos respectivos.
Miembros de datos
| Miembro | Descripción |
V
base_
|
la vista subyacente
( objeto miembro solo para exposición* ) |
Funciones miembro
construye un
elements_view
(función miembro pública) |
|
|
devuelve una copia de la vista subyacente (adaptada)
(función miembro pública) |
|
|
devuelve un iterador al inicio
(función miembro pública) |
|
|
devuelve un iterador o un centinela al final
(función miembro pública) |
|
devuelve el número de elementos, proporcionado solo si el rango subyacente (adaptado) satisface
sized_range
(función miembro pública) |
|
|
(C++26)
|
devuelve el tamaño aproximado del
approximately_sized_range
resultante
(función miembro pública) |
Heredado de ranges::view_interface | |
| devuelve si la vista derivada está vacía, solo si satisface sized_range o forward_range (función miembro pública de std::ranges::view_interface<D>)
| |
(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, 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, si satisface forward_range (función miembro pública de std::ranges::view_interface<D>)
| |
| devuelve el último elemento en la vista derivada, solo si satisface bidirectional_range y common_range (función miembro pública de std::ranges::view_interface<D>)
| |
devuelve el n-ésimo elemento en la vista derivada, solo si satisface random_access_range (función miembro pública de std::ranges::view_interface<D>)
| |
Clases anidadas
|
el tipo de iterador
( clase de plantilla miembro solo para exposición* ) |
|
|
el tipo de centinela
( clase de plantilla miembro solo para exposición* ) |
Plantillas auxiliares
|
template
<
class
T,
std::
size_t
N
>
constexpr
bool
enable_borrowed_range
<
std
::
ranges
::
elements_view
<
T, N
>>
=
|
(desde C++20) | |
Esta especialización de
ranges::enable_borrowed_range
hace que
elements_view
satisfaga
borrowed_range
cuando la vista subyacente lo satisface.
Ejemplo
#include <iostream> #include <ranges> #include <string> #include <tuple> #include <vector> int main() { const std::vector<std::tuple<int, char, std::string>> vt { {1, 'A', "α"}, {2, 'B', "β"}, {3, 'C', "γ"}, {4, 'D', "δ"}, {5, 'E', "ε"}, }; for (int const e : std::views::elements<0>(vt)) std::cout << e << ' '; std::cout << '\n'; for (char const e : vt | std::views::elements<1>) std::cout << e << ' '; std::cout << '\n'; for (std::string const& e : std::views::elements<2>(vt)) std::cout << e << ' '; std::cout << '\n'; }
Salida:
1 2 3 4 5 A B C D E α β γ δ ε
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Se aplica a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 3494 | C++20 |
elements_view
nunca fue un
borrowed_range
|
es un
borrowed_range
si su vista subyacente lo es |
| LWG 3502 | C++20 |
se podía obtener una referencia colgante de
elements_view
|
se prohíbe dicho uso |
Véase también
|
(C++20)
|
toma una
view
que consiste en valores tipo par y produce una
view
de los primeros elementos de cada par
(plantilla de clase) (objeto adaptador de rango) |
toma una
view
que consiste en valores tipo par y produce una
view
de los segundos elementos de cada par
(plantilla de clase) (objeto adaptador de rango) |
|
|
(C++23)
|
una
view
que consiste en tuplas de referencias a elementos correspondientes de las vistas adaptadas
(plantilla de clase) (objeto punto de personalización) |
una
view
que consiste en resultados de la aplicación de una función de transformación a elementos correspondientes de las vistas adaptadas
(plantilla de clase) (objeto punto de personalización) |
|
|
segmento tipo BLAS de un valarray: índice inicial, longitud, paso
(clase) |