【问题标题】:Converting a valarray to a vector without copying将 valarray 转换为向量而不复制
【发布时间】: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 我很确定这是不可能的。

标签: c++ vector valarray


【解决方案1】:

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

您的选择是:

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

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

【讨论】:

  • “我会从选项 3 开始,然后只是复制。” 好建议,在测量证明确实如此之前不会太慢。
  • 这很不幸。这将是一个很好的功能。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2020-04-27
  • 2015-07-09
  • 2017-09-29
  • 1970-01-01
  • 2014-09-21
  • 2019-06-25
  • 1970-01-01
  • 2012-01-11
相关资源
最近更新 更多