You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何结合std::views::zip与std::ranges::for_each调用双参数process函数?

使用std::ranges::for_each调用双参数process函数的方法

要通过std::ranges::for_each调用接受两个int参数的process函数,核心是借助lambda表达式对std::views::zip生成的打包元素进行解构,再传递给目标函数。

实现代码

写法一:在lambda内部解构

#include <ranges>
#include <algorithm>
#include <vector>

void process(int a, int b);

int main() {
    std::vector<int> itemsA = {1, 2, 3};
    std::vector<int> itemsB = {4, 5, 6};

    std::ranges::for_each(
        std::views::zip(itemsA, itemsB),
        [](auto&& zip_pair) {
            auto [a, b] = zip_pair;
            process(a, b);
        }
    );
}

写法二:直接在lambda参数中解构(更简洁)

std::ranges::for_each(
    std::views::zip(itemsA, itemsB),
    [](auto&& [a, b]) {
        process(a, b);
    }
);

原理说明

std::views::zip会将多个输入范围的对应元素打包成std::tuple(两个范围时就是包含两个元素的tuple),std::ranges::for_each的回调函数每次接收一个这样的tuple对象。通过C++17引入的结构化绑定,我们可以直接将tuple中的元素拆解为独立的变量a和b,再传递给process(int, int)函数。

内容的提问来源于stack exchange,提问作者jozxyqk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 23:39:53