c++ - 是否可以在 cpp20 中创建范围 vector

标签 c++ c++20 std-ranges

假设我有一个 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/

相关文章:

c++ 将 printf 与 wprintf 混合(或将 cout 与 wcout 混合)

C++ 20 概念中的依赖模板

c++ - 我可以编写一个需要函数模板的 C++ 概念吗?必须向该函数模板提供一些枚举值作为模板参数?

c++ - 如何在cpp20实验中导入C断言

c++ - 如何检查范围内的元素是否应该移动?

c++ - 在 QTcpServer 服务器端出现 : The remote host closed the connection

C++11 - 从流中删除输入

c++ - 模板基类的调用方法

c++ - 为什么没有引入std::ranges::?

c++ - 如何将 istream_view 收集到容器中?