std::views::zip_transform — apply function to zip of ranges.
1#include <ranges>23std::vector<int> v1 = {1, 2, 3};4std::vector<int> v2 = {4, 5, 6};56// Add corresponding elements7auto sums = std::views::zip_transform(std::plus{}, v1, v2);8for (int x : sums) {9 std::cout << x << " "; // 5 7 910}1112// Custom lambda13auto products = std::views::zip_transform(14 [](int a, int b) { return a * b; },15 v1, v216);17// 4 10 181819// Three ranges20std::vector<int> v3 = {7, 8, 9};21auto sum3 = std::views::zip_transform(22 [](int a, int b, int c) { return a + b + c; },23 v1, v2, v324);25// 12 15 182627// Composable28auto result = std::views::zip_transform(std::plus{}, v1, v2)29 | std::views::filter([](int x) { return x > 6; });30// 7 93132// Size is minimum of all ranges33std::vector<int> v4 = {1, 2};34auto r = std::views::zip_transform(std::plus{}, v1, v4);35std::cout << r.size(); // 2
vs zip + transform: