Daily bit(e) C++. std::views::zip_transform
Добавлено 5 октября 2026 в 21:15
Daily bit(e) C++ 144, представление с n-арным преобразованием из C++23 – std::views::zip_transform.

std::views::zip_transform из стандарта C++23 – это представление, в котором i-й элемент получается путем применения n-арной функции (вызываемого объекта) к i-м элементам переданных диапазонов.
Это представление является «ленивой» версией бинарного std::ranges::transform, обобщенной для произвольного количества диапазонов.
#include <ranges>
#include <vector>
std::vector<int> first{1,2,3,4};
std::vector<double> second{9.1, 9.2, 9.3, 9.4, 9.5};
std::vector<std::string> third{"a", "b", "c", "d", "e"};
// Функция преобразования берет по одному элементу из каждого диапазона
auto zip = [](int& a, double& b, std::string& c)
{
return a+b+(c[0]-'a');
};
// сформировать представление, в котором i-й элемент является
// результатом применения функции преобразования к i-м элементам
// переданных диапазонов;
// длина определяется по самому короткому из диапазонов
for (auto v : std::views::zip_transform(zip, first,second,third))
{
// итерация по 10.1, 12.2, 14.3, 16.4
}
