std::ranges:: views:: zip_transform, std::ranges:: zip_transform_view
|
Определено в заголовочном файле
<ranges>
|
||
|
template
<
std::
move_constructible
F,
ranges::
input_range
...
Views
>
requires
(
ranges::
view
<
Views
>
&&
...
)
&&
(
sizeof...
(
Views
)
>
0
)
&&
|
(1) | (начиная с C++23) |
|
namespace
views
{
inline
constexpr
/*unspecified*/
zip_transform
=
/*unspecified*/
;
|
(2) | (начиная с C++23) |
|
Сигнатура вызова
|
||
|
template
<
class
F,
ranges::
viewable_range
...
Rs
>
requires
/* см. ниже */
|
(начиная с C++23) | |
zip_transform_view
— это адаптер диапазона, который принимает вызываемый объект и один или несколько
view
s
, и создаёт
view
, чей
i
th
элемент является результатом применения вызываемого объекта к
i
th
элементам всех представлений.
Тип
T
моделирует исключительно экспозиционную концепцию
/*can-reference*/
тогда и только тогда, когда
T&
является допустимым типом.
views::zip_transform
является объектом точки настройки.
При вызове с одним аргументом
f
, пусть
FD
будет
std::
decay_t
<
decltype
(
f
)
>
, если:
-
FDмоделируетcopy_constructible, -
FD
&
моделирует
regular_invocable, и - std:: invoke_result_t < FD & > является объектным типом,
тогда
views
::
zip_transform
(
f
)
является
эквивалентным по выражению
к
(
(
void
)
f,
auto
(
views::
empty
<
std::
decay_t
<
std::
invoke_result_t
<
FD
&
>>>
)
)
. В противном случае вызов
views::zip_transform
является некорректным.
zip_transform_view
моделирует концепции
random_access_range
,
bidirectional_range
,
forward_range
,
input_range
,
common_range
и
sized_range
, когда базовый
ranges::
zip_view
<
Views...
>
моделирует соответствующие концепции.
Содержание |
Объекты точек кастомизации
Имя
views::zip_transform
обозначает
объект точки кастомизации
, который является константным
функциональным объектом
литерального
типа
semiregular
класса. Для подробностей см.
CustomizationPointObject
.
Функции-члены
создает
zip_transform_view
(публичная функция-член) |
|
|
возвращает итератор на начало
(публичная функция-член) |
|
|
возвращает итератор или страж на конец
(публичная функция-член) |
|
возвращает количество элементов, предоставляется только если каждый базовый (адаптированный) диапазон удовлетворяет
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>
)
|
|
Руководства по выводу
Типы членов
| Тип члена | Определение |
InnerView
(private)
|
ranges::
zip_view
<
Views...
>
.
( тип члена только для демонстрации* ) |
ziperator
(private)
|
|
zentinel
(private)
|
|
Члены данных
| Объект-член | Определение |
zip_
(private)
|
Базовый объект представления типа
InnerView
( объект-член только для демонстрации* ) |
fun_
(private)
|
Обёрнутый вызываемый объект типа
movable-box
<F>
( объект-член только для демонстрации* ) |
Вложенные классы
|
тип итератора
( демонстрационный шаблон класса-члена* ) |
|
тип сторожа, используемый когда базовый
zip_view
не является
common_range
( демонстрационный шаблон класса-члена* ) |
Примечания
| Макрос тестирования возможностей | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_ranges_zip
|
202110L
|
(C++23) |
ranges::
zip_view
,
std::ranges::zip_transform_view
,
ranges:: adjacent_view , ranges:: adjacent_transform_view |
Пример
#include <array> #include <iostream> #include <list> #include <ranges> #include <vector> void print(auto const rem, auto const& r) { std::cout << rem << '{'; for (char o[]{0,' ',0}; auto const& e : r) std::cout << o << e, *o = ','; std::cout << "}\n"; } int main() { auto v1 = std::vector<float>{1, 2, 3}; auto v2 = std::list<short>{1, 2, 3, 4}; auto v3 = std::to_array({1, 2, 3, 4, 5}); auto add = [](auto a, auto b, auto c) { return a + b + c; }; auto sum = std::views::zip_transform(add, v1, v2, v3); print("v1: ", v1); print("v2: ", v2); print("v3: ", v3); print("sum: ", sum); }
Вывод:
v1: {1, 2, 3}
v2: {1, 2, 3, 4}
v3: {1, 2, 3, 4, 5}
sum: {3, 6, 9}
Смотрите также
|
(C++23)
|
представление,
view
состоящее из кортежей ссылок на соответствующие элементы адаптированных представлений
(шаблон класса) (объект точки кастомизации) |
представление
view
последовательности, которое применяет функцию преобразования к каждому элементу
(шаблон класса) (объект адаптера диапазона) |
|
принимает
view
состоящий из
tuple-like
значений и число N, и создает
view
N-го элемента каждого кортежа
(шаблон класса) (объект адаптера диапазона) |