首页 > 解决方案 > 将结果存储在带有范围的 zip 视图中

问题描述

我有两个向量,我想对它们都应用基于第三个向量的变换

std::vector<int> out1;
std::vector<int> out2;
std::vector<int> in1;

std::transform(std::begin(in1), std::end(in1), std::begin(out1), transform1);
std::transform(std::begin(in1), std::end(in1), std::begin(out2), transform2);

这需要两个循环,所以我尝试使用 range-v3 中的 zip 范围来完成

std::vector<int> out1;
std::vector<int> out2;
std::vector<int> in1;
auto &zip = ranges::zip(out1, out2);

std::transform(std::begin(in1), std::end(in1), std::begin(zip), transform1and2);

然而,这具有将 1 和 2 的转换嵌入到同一函数中的缺点,需要对其进行修改以返回 std::pair。

有没有更清洁的方法来做到这一点?

标签: c++11vectorrange

解决方案


推荐阅读