adi*_*ain 3 c++ c++20 std-ranges
假设我有 aa 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];
}));
}
Run Code Online (Sandbox Code Playgroud)
目前在 C++ 中是否可以进行这样的转换或类似的转换?
我知道可以简单地存储transformation_coeff,但在每一步都应用它很不方便。(这将重复多次,因此需要在 中完成O(log n),因此我无法显式应用转换)。
是的,你可以有一个范围向量。您的代码中的问题是您在 using 语句中使用了临时 lambda。因此,您稍后推入向量的项目的类型与 不同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));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
278 次 |
| 最近记录: |