Daily bit(e) C++. std::views::zip_transform

Добавлено 5 октября 2026 в 21:15

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

Daily bit(e) C++

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
}

Пример на Compiler Explorer

Теги

C++ / CppDaily bit(e) C++Программирование