我有一个非常大的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;。这听起来像是复制品。有没有方法可以不复制?
答案 0 :(得分:5)
不,我担心如果不复制,就无法将valarray
转换为vector
。
您的选择是:
vector
,并使用expression templates保留valarray
的大部分优势。valarray
。我会从选项3开始,然后复制。