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

Phl*_*das 2 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));
}
Run Code Online (Sandbox Code Playgroud)

有关assign的文档说明该函数"将新内容分配给向量,替换其当前内容,并相应地修改其大小.".这听起来像是复制品.有没有办法不复制?

Mar*_*ica 5

不,我担心无法将a转换valarray为a vector而无需复制.

你的选择是:

  1. 转换现有的代码库以使用vector,并使用表达式模板来保留大部分的好处valarray.
  2. 转换库以使用valarray.
  3. 复制.

我将从选项3开始,然后复制.