假设我有一个 vector<vector<int>>
.我想使用 ranges::transform
以这样的方式,我得到了
vector<vector<int>> original_vectors;
using T = decltype(ranges::views::transform(original_vectors[0], [&](int x){
return x;
}));
vector<int> transformation_coeff;
vector<T> transformed_vectors;
for(int i=0;i<n;i++){
transformed_vectors.push_back(ranges::views::transform(original_vectors[i], [&](int x){
return x * transformation_coeff[i];
}));
}
目前在 C++ 中是否可以进行这种转换或类似的转换?
我知道可以简单地存储 transformation_coeff
,但在每一步都应用它很不方便。 (这将重复多次,因此需要在 O(log n)
中完成,因此我无法明确应用转换)。
最佳答案
是的,您可以有一个范围 vector 。您的代码中的问题是您在 using 语句中使用了临时 lambda。因此,您稍后插入 vector 中的项目类型与 T
不同。您可以通过先将 lambda 分配给变量来解决它:
vector<vector<int>> original_vectors;
auto lambda = [&](int x){return x;};
using T = decltype(ranges::views::transform(original_vectors[0], lambda));
vector<T> transformed_vectors;
transformed_vectors.push_back(ranges::views::transform(original_vectors[0], lambda));
关于c++ - 是否可以在 cpp20 中创建范围 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74325702/