Namespaces
Variants

std::ranges::views::zip_transform, std::ranges::zip_transform_view

С сайта ru.cppreference.net
 
 
Библиотека диапазонов
Адаптеры диапазонов
 
 
Определено в заголовке <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)
1) zip_transform_view — это адаптер диапазона, который принимает вызываемый объект и одно или несколько представлений и создает представление, i-й элемент которого является результатом применения вызываемого объекта к i-м элементам всех представлений.
Тип T удовлетворяет концепции, предназначенной только для демонстрации, /*can-reference*/ тогда и только тогда, когда T& является допустимым типом.
2) views::zip_transform — это объект настройки точки.

При вызове с одним аргументом f, пусть FD будет std::decay_t<decltype(f)>, если:

тогда 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 (закрытый)
  • ranges::iterator_t<const InnerView> если Const является true, в противном случае
  • ranges::iterator_t<InnerView>.
    (тип-член, используемый только для пояснения*)
zentinel (закрытый)
  • ranges::sentinel_t<const InnerView> если Const является true, в противном случае
  • ranges::sentinel_t<InnerView>.
    (тип-член, используемый только для пояснения*)

Элементы данных

Элемент Описание
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}

См. также

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