将 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::valarraystd::vector 我很确定这是不可能的。 【参考方案1】:

不,恐怕无法在不复制的情况下将valarray 转换为vector

您的选择是:

    将现有代码库转换为使用vector,并使用expression templates 保留valarray 的大部分优势。 将库转换为使用valarray。 复制。

我会从选项 3 开始,然后复制。

【讨论】:

“我会从选项 3 开始,然后只是复制。” 好建议,在测量证明确实如此之前不会太慢。 这很不幸。这将是一个很好的功能。感谢您的帮助。

以上是关于将 valarray 转换为向量而不复制的主要内容,如果未能解决你的问题,请参考以下文章

将 std::vector 分配给 std::valarray

将已知长度的 char 指针转换为 char 向量而不分配新内存

如何从向量初始化 valarray?

如何将两列“计数”矩阵转换为 R 中的二进制向量? [复制]

将numpy结构化数组子集转换为numpy数组而不复制

有啥方法可以避免 valarray 和数组之间的复制吗?