无需复制即可将valarray转换为矢量

时间:2016-09-19 10:16:10

标签: c++ vector valarray

我有一个非常大的valarray,我需要转换为矢量,因为我使用的库只需要一个矢量作为输入。我想知道是否可以在不复制的情况下从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上的文档说明函数&#34;为向量分配新内容,替换其当前内容,并相应地修改其大小。&#34;。这听起来像是复制品。有没有方法可以不复制?

1 个答案:

答案 0 :(得分:5)

不,我担心如果不复制,就无法将valarray转换为vector

您的选择是:

  1. 将现有代码库转换为使用vector,并使用expression templates保留valarray的大部分优势。
  2. 将库转换为使用valarray
  3. 复制。
  4. 我会从选项3开始,然后复制。