std::ranges:: views:: elements, std::ranges:: elements_view
|
Определено в заголовке
<ranges>
|
||
|
template
<
ranges::
input_range
V,
std::
size_t
N
>
requires
ranges::
view
<
V
>
&&
|
(1) | (начиная с C++20) |
|
namespace
views
{
template
<
std::
size_t
N
>
|
(2) | (начиная с C++20) |
|
Сигнатура вызова
|
||
|
template
<
ranges::
viewable_range
R
>
requires
/* см. ниже */
|
(начиная с C++20) | |
|
Вспомогательные концепты
|
||
| (3) | ||
|
template
<
class
T,
std::
size_t
N
>
concept
/*has-tuple-element*/
=
|
(до C++23)
( только для демонстрации* ) |
|
|
template
<
class
T,
std::
size_t
N
>
concept
/*has-tuple-element*/
=
|
(начиная с C++23)
( только для демонстрации* ) |
|
|
template
<
class
T,
std::
size_t
N
>
концепция returnable
-
element
=
|
(4) | ( только для демонстрации* ) |
view
кортежеподобных значений и выдает представление с типом значения, соответствующим
N
-му
элементу типа значения адаптированного представления.
views::elements
является
RangeAdaptorObject
. Выражение
views
::
elements
<
M
>
(
e
)
является
эквивалентным по выражению
выражению
elements_view
<
views::
all_t
<
decltype
(
(
e
)
)
>
, M
>
{
e
}
для любого подходящего подвыражения
e
и константного выражения
M
.
elements_view
моделирует концепции
random_access_range
,
bidirectional_range
,
forward_range
,
input_range
,
common_range
и
sized_range
, когда базовое представление
V
моделирует соответствующие концепции.
Содержание |
Члены данных
| Участник | Описание |
V
base_
|
базовое представление
( объект-член только для демонстрации* ) |
Функции-члены
конструирует
elements_view
(публичная функция-член) |
|
|
возвращает копию базового (адаптированного) представления
(публичная функция-член) |
|
|
возвращает итератор на начало
(публичная функция-член) |
|
|
возвращает итератор или страж на конец
(публичная функция-член) |
|
возвращает количество элементов, предоставляется только если базовый (адаптированный) диапазон удовлетворяет
sized_range
(публичная функция-член) |
|
|
(C++26)
|
возвращает приблизительный размер результирующего
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
>>
=
|
(начиная с 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 |
Смотрите также
|
(C++20)
|
принимает
view
состоящий из пароподобных значений и создаёт
view
первых элементов каждой пары
(шаблон класса) (объект адаптера диапазона) |
принимает
view
состоящий из пароподобных значений и создаёт
view
вторых элементов каждой пары
(шаблон класса) (объект адаптера диапазона) |
|
|
(C++23)
|
view
состоящий из кортежей ссылок на соответствующие элементы адаптированных представлений
(шаблон класса) (объект точки кастомизации) |
view
состоящий из результатов применения функции преобразования к соответствующим элементам адаптированных представлений
(шаблон класса) (объект точки кастомизации) |
|
|
BLAS-подобный срез valarray: начальный индекс, длина, шаг
(класс) |