Espacios de nombres
Variantes

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

De cppreference.com
 
 
Biblioteca de rangos
Adaptadores de rangos
 
 
<tbody> </tbody>
Definido en el archivo de encabezado <ranges>
template< ranges::input_range V, std::size_t N > requires view<V> && /*tiene-elemento_tupla*/<ranges::range_value_t<V>, N> && /*tiene-elemento_tupla*/<std::remove_reference_t<ranges::range_reference_t<V>>, N> && /*elemento-retornable*/<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 > inline constexpr /*no especificado*/ elements = /*no especificado*/; }
(2) (desde C++20)
Signatura de la llamada
template< ranges::viewable_range R > requires /* véase a continuación */ constexpr ranges::view auto elements<N>( R&& r );
(desde C++20)
Helper concepts
template< class T, std::size_t N > concept /*tiene-elemento_tupla*/ = // solo de exposición 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) (desde C++20)
template< class T, std::size_t N > concept /*elemento-retornable*/ = // solo de exposición std::is_reference_v<T> || std::move_constructible<std::tuple_element_t<N, T>>;
(4) (desde C++20)
1) Acepta una vista (view) de valores similares a tuplas, y emite una vista con un tipo valor del N-ésimo elemento del tipo valor de la vista adaptada.
2) Cada especialización de views::elements es un objeto adaptador de rango. 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 e y expresión constante M adecuadas.
3) Se asegura de que los elementos de la vista subyacente sean valores similares a tuplas.
4) Se asegura de que no puedan devolverse referencias pendientes.

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.

Equivalente en expresión

La expresión e es equivalente-en-expresión a la expresión f, si e y f tienen los mismos efectos, ambas potencialmente lanzan o ambas potencialmente no lanzan (es decir, noexcept (e) == noexcept(f)), y ambas son subexpresiones constantes o ambas no son subexpresiones constantes.

Funciones miembro

Construye un objeto elements_view
(función miembro pública) [editar]
(C++20)
Devuelve una copia de la vista (adaptada) subyacente.
(función miembro pública) [editar]
(C++20)
Devuelve un iterador al comienzo.
(función miembro pública) [editar]
(C++20)
Devuelve un iterador o un centinela al final.
(función miembro pública) [editar]
(C++20)
Devuelve el número de elementos. Se proporciona solo si el rango (adaptado) subyacente satisface sized_range .
(función miembro pública) [editar]
Heredadas de ranges::view_interface
(C++20)
Devuelve si la vista derivada está vacía o no. Se proporciona si la vista derivada satisface forward_range.
(función miembro pública de std::ranges::view_interface<D>) [editar]
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]
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]

Clases anidadas

(C++20)
El tipo iterador.
(plantilla de clase miembro de solo exposición)
(C++20)
El tipo centinela.
(plantilla de clase miembro de solo exposición)

Plantillas auxiliares

<tbody> </tbody>
template<class T, std::size_t N> inline constexpr bool enable_borrowed_range<std::ranges::elements_view<T, N>> = std::ranges::enable_borrowed_range<T>;
(desde C++20)

Esta especialización de std::ranges::enable_borrowed_range hace que elements_view satisfaga borrowed_range cuando la vista subyacente lo hace.

Ejemplo

#include <iostream>
#include <ranges>
#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 de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
LWG 3494 C++20 elements_view nunca era un borrowed_range. Es un borrowed_range si su vista subyacente lo es.
LWG 3502 C++20 Podía obtenerse una referencia pendiente de elements_view. Se prohíbe tal uso.

Véase también

Toma una vista (view) que consiste en valores similares a pares y produce una vista de los primeros elementos de cada par.
(plantilla de clase) (objeto adaptador de rango) [editar]
Toma una vista (view) que consiste valores similares a pares y produce una vista de los segundos elementos de cada par.
(plantilla de clase) (objeto adaptador de rango) [editar]
BLAS-como una rebanada de valarray: índice de inicio, duración, ritmo
Original:
BLAS-like slice of a valarray: starting index, length, stride
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(clase) [editar]