如何结合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
相关产品推荐
相关产品推荐

