Namespaces
Variants

std::ranges::views::elements, std::ranges::elements_view

De es.cppreference.net
 
 
Biblioteca de rangos
Adaptadores de rangos
 
 
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*)
1) Acepta una view de valores tipo tupla, y produce una vista con un tipo de valor del N-ésimo elemento del tipo de valor de la vista adaptada.
2) Cada especialización de 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.
3) Asegura que los elementos de la vista subyacente son valores tipo tupla, ver tuple-like(desde C++23).
4) Asegura que no se pueden devolver referencias colgantes.

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)
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 >> =

ranges:: enable_borrowed_range < T > ;
(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

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)
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)