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) &&
std::is_object_v<F> && std::regular_invocable<
F&, ranges::range_reference_t<Views>...> &&
/*can-reference*/<std::invoke_result_t<
F&, ranges::range_reference_t<Views>...>>
class zip_transform_view
: public ranges::view_interface<zip_transform_view<F, Views...>>
|
(1) | (начиная с C++23) |
namespace views {
inline constexpr /*unspecified*/ zip_transform = /*unspecified*/;
}
|
(2) | (начиная с C++23) |
| Сигнатура вызова |
||
template< class F, ranges::viewable_range... Rs >
requires /* see below */
constexpr auto zip_transform( F&& f, Rs&&... rs );
|
(начиная с C++23) | |
zip_transform_view — это адаптер диапазона, который принимает вызываемый объект и одно или несколько представлений и создает представление, i-й элемент которого является результатом применения вызываемого объекта к i-м элементам всех представлений.Тип
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 является некорректным.
f и rs..., views::zip_transform(f, rs...) является эквивалентом выражения для ranges::zip_transform_view(f, rs...).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
(публичная функция-член) |
|
Унаследовано от 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 (закрытый)
|
ranges::zip_view<Views...>.(тип-член, используемый только для пояснения*) |
ziperator (закрытый)
|
|
zentinel (закрытый)
|
|
Элементы данных
| Элемент | Описание |
InnerView zip_ (закрытый)
|
базовый объект представления (демонстрационный элемент-объект*) |
перемещаемый блок<F> fun_ (закрытый)
|
обёрнутый вызываемый объект (демонстрационный элемент-объект*) |
Вложенные классы
|
тип итератора
( демонстрационный шаблон класса-члена* ) |
|
тип сторожа, используемый когда базовый
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) |
представление, состоящее из кортежей ссылок на соответствующие элементы адаптированных представлений (шаблон класса) (объект настройки точки) |
| представление последовательности, применяющее функцию преобразования к каждому элементу (шаблон класса) (объект адаптера диапазона) | |
| принимает представление, состоящее из значений, подобных кортежу, и число N, и создаёт представление N-го элемента каждого кортежа (шаблон класса) (объект адаптера диапазона) |