c++ - 在不复制的情况下将 valarray 转换为 vector

标签 c++ vector valarray

我有一个非常大的 valarray,我需要将其转换为 vector ,因为我使用的库只将 vector 作为输入。我想知道是否可以在不复制的情况下从 valarray 转换为 vector。这是我拥有的:

#include <vector>
#include <valarray>

int main() {
    std::valarray<double> va{ {1, 2, 3, 4, 5} };

    //Error: cannot convert from 'initializer list' to 'std::vector<eT,std::allocator<_Ty>>'
    //std::vector<double> v1{ std::begin(va), va.size() };

    //Error: cannot convert from 'std::valarray<double>' to 'std::vector<eT,std::allocator<_Ty>>'
    //std::vector<double> v2{ std::move(va) };

    // Works but I'm not sure if it's copying
    std::vector<double> v3;
    v3.assign(std::begin(va), std::end(va));
}

关于 assign 的文档表示该函数“将新内容分配给 vector ,替换其当前内容,并相应地修改其大小。”。这听起来像是复制品。有没有不用复制的方法?

最佳答案

不,恐怕不进行复制就无法将 valarray 转换为 vector

您的选择是:

  1. 将您现有的代码库转换为使用vector,并使用expression templates保留 valarray 的大部分优点。
  2. 将库转换为使用 valarray
  3. 复制。

我将从选项 3 开始,然后直接复制。

关于c++ - 在不复制的情况下将 valarray 转换为 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39570656/

相关文章:

c++ - C++ 中有趣的位掩码拼图

c++ - ˋtypedefˋ 中的异常规范是完全禁止的还是仅在顶层?

c++ - 如何从 QTabWidget 获取小部件?

c++ - 将多个带有 vector 的 map 合并为一张 map

c++ - 使用变量索引对 vector 的 vector 进行排序

c++ - 使用 XCTest 编写 C++ 单元测试

c++ - 带碰撞的 N 体模拟

c++ - 如何在 C++ 中做矩阵和 vector 之间的点积

c++ - 初始化后来自 valarray<int> 的错误值

c++ - 在什么意义上 valarray 没有别名?