Namespaces
Variants

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

From cppreference.net
Ranges library
Range adaptors
Определено в заголовке <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) (начиная с C++20)
namespace views {

template < std:: size_t N >
constexpr /* неопределено */ elements = /* неопределено */ ;

}
(2) (начиная с C++20)
Сигнатура вызова
template < ranges:: viewable_range R >

requires /* см. ниже */

constexpr ranges:: view auto elements < N > ( R && r ) ;
(начиная с C++20)
Вспомогательные концепты
(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 > & > ;

} ;
(до C++23)
( только для демонстрации* )
template < class T, std:: size_t N >

concept /*has-tuple-element*/ =

/*tuple-like*/ < T > && N < std:: tuple_size_v < T >
(начиная с C++23)
( только для демонстрации* )
template < class T, std:: size_t N >

концепция returnable - element =
std:: is_reference_v < T > || std:: move_constructible <

std:: tuple_element_t < N, T >> ;
(4) ( только для демонстрации* )
1) Принимает view кортежеподобных значений и выдает представление с типом значения, соответствующим N -му элементу типа значения адаптированного представления.
2) Каждая специализация views::elements является RangeAdaptorObject . Выражение views :: elements < M > ( e ) является эквивалентным по выражению выражению elements_view < views:: all_t < decltype ( ( e ) ) > , M > { e } для любого подходящего подвыражения e и константного выражения M .
3) Гарантирует, что элементы базового представления являются кортежеподобными значениями , см. tuple-like (начиная с C++23) .
4) Гарантирует, что висячие ссылки не могут быть возвращены.

elements_view моделирует концепции random_access_range , bidirectional_range , forward_range , input_range , common_range и sized_range , когда базовое представление V моделирует соответствующие концепции.

Содержание

Члены данных

Участник Описание
V base_ базовое представление
( объект-член только для демонстрации* )

Функции-члены

конструирует elements_view
(публичная функция-член)
возвращает копию базового (адаптированного) представления
(публичная функция-член)
возвращает итератор на начало
(публичная функция-член)
возвращает итератор или страж на конец
(публичная функция-член)
возвращает количество элементов, предоставляется только если базовый (адаптированный) диапазон удовлетворяет sized_range
(публичная функция-член)
возвращает приблизительный размер результирующего approximately_sized_range
(публичная функция-член)
Наследуется от std::ranges::view_interface
возвращает, является ли производное представление пустым, предоставляется только если оно удовлетворяет sized_range или forward_range
(публичная функция-член std::ranges::view_interface<D> )
(C++23)
возвращает константный итератор на начало диапазона
(публичная функция-член std::ranges::view_interface<D> )
(C++23)
возвращает страж для константного итератора диапазона
(публичная функция-член std::ranges::view_interface<D> )
возвращает, является ли производное представление непустым, предоставляется только если ranges::empty применимо к нему
(публичная функция-член std::ranges::view_interface<D> )
возвращает первый элемент в производном представлении, предоставляется если оно удовлетворяет forward_range
(публичная функция-член std::ranges::view_interface<D> )
возвращает последний элемент в производном представлении, предоставляется только если оно удовлетворяет bidirectional_range и common_range
(публичная функция-член std::ranges::view_interface<D> )
возвращает n элемент в производном представлении, предоставляется только если оно удовлетворяет random_access_range
(публичная функция-член std::ranges::view_interface<D> )

Вложенные классы

тип итератора
( демонстрационный шаблон класса-члена* )
тип сторожа
( демонстрационный шаблон класса-члена* )

Вспомогательные шаблоны

template < class T, std:: size_t N >

constexpr bool enable_borrowed_range < std :: ranges :: elements_view < T, N >> =

ranges:: enable_borrowed_range < T > ;
(начиная с C++20)

Эта специализация ranges::enable_borrowed_range позволяет elements_view удовлетворять требованиям borrowed_range , когда базовое представление удовлетворяет этим требованиям.

Пример

#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';
}

Вывод:

1 2 3 4 5
A B C D E
α β γ δ ε

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
LWG 3494 C++20 elements_view was never a borrowed_range it is a borrowed_range
if its underlying view is
LWG 3502 C++20 dangling reference could be obtained from elements_view such usage is forbidden

Смотрите также

принимает view состоящий из пароподобных значений и создаёт view первых элементов каждой пары
(шаблон класса) (объект адаптера диапазона)
принимает view состоящий из пароподобных значений и создаёт view вторых элементов каждой пары
(шаблон класса) (объект адаптера диапазона)
view состоящий из кортежей ссылок на соответствующие элементы адаптированных представлений
(шаблон класса) (объект точки кастомизации)
view состоящий из результатов применения функции преобразования к соответствующим элементам адаптированных представлений
(шаблон класса) (объект точки кастомизации)
BLAS-подобный срез valarray: начальный индекс, длина, шаг
(класс)