将 valarray 转换为向量而不复制
Posted
技术标签:
【中文标题】将 valarray 转换为向量而不复制【英文标题】:Converting a valarray to a vector without copying 【发布时间】:2016-09-19 10:16:09 【问题描述】:我有一个非常大的 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 上的文档说该函数“将新内容分配给向量,替换其当前内容,并相应地修改其大小。”。这对我来说听起来像是复制品。有没有不复制的方法?
【问题讨论】:
std::valarray
和 std::vector
我很确定这是不可能的。
【参考方案1】:
不,恐怕无法在不复制的情况下将valarray
转换为vector
。
您的选择是:
-
将现有代码库转换为使用
vector
,并使用expression templates 保留valarray
的大部分优势。
将库转换为使用valarray
。
复制。
我会从选项 3 开始,然后复制。
【讨论】:
“我会从选项 3 开始,然后只是复制。” 好建议,在测量证明确实如此之前不会太慢。 这很不幸。这将是一个很好的功能。感谢您的帮助。以上是关于将 valarray 转换为向量而不复制的主要内容,如果未能解决你的问题,请参考以下文章
将 std::vector 分配给 std::valarray
将已知长度的 char 指针转换为 char 向量而不分配新内存