Namespaces
Variants

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

From cppreference.net
Ranges library
Range adaptors
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 /* no especificado */ elements = /* no especificado */ ;

}
(2) (desde C++20)
Firma de llamada
template < ranges:: viewable_range R >

requires /* ver más abajo */

constexpr ranges:: view auto elements < N > ( R && r ) ;
(desde C++20)
Conceptos auxiliares
(3)
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 > & > ;

} ;
(hasta C++23)
( solo para 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 para exposición* )
template < class T, std:: size_t N >

concepto returnable - element =
std:: is_reference_v < T > || std:: move_constructible <

std:: tuple_element_t < N, T >> ;
(4) ( solo para exposición* )
1) Acepta una view de valores tipo tupla, y produce una vista con un tipo de valor correspondiente al N -ésimo elemento del tipo de valor de la vista adaptada.
2) Toda especialización de views::elements es un RangeAdaptorObject . La expresión views :: elements < M > ( e ) es equivalente-expresión a elements_view < views:: all_t < decltype ( ( e ) ) > , M > { e } para cualquier subexpresión adecuada e y expresión constante M .
3) Garantiza que los elementos de la vista subyacente sean valores de tipo tupla , ver tuple-like (desde C++23) .
4) Garantiza que no se puedan 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 respectivos conceptos.

Contenidos

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 std::ranges::view_interface
devuelve si la vista derivada está vacía, proporcionado 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, proporcionado 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, proporcionado si satisface forward_range
(función miembro pública de std::ranges::view_interface<D> )
devuelve el último elemento en la vista derivada, proporcionado 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, proporcionado 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)