【问题标题】:Converting double* to std::vector<double> (C++) [duplicate]将 double* 转换为 std::vector<double> (C++) [重复]
【发布时间】:2018-09-23 15:23:51
【问题描述】:

我有一个很长的双精度数组 (>10000),它从数据文件中读取了数据。我想把它转换成 std​​::vector 以便能够使用一些相关的功能。

有没有比逐个复制数据更好更有效的方法?

提前致谢。

【问题讨论】:

  • 你为什么不首先阅读vector
  • "very long double array (>10000)" - 除非您有数亿个 double,否则将 double 数组复制到向量应该是微不足道的。
  • @Nadir 答案属于答案部分。尤其是因为您可以对答案投反对票,这与 cmets 不同,考虑到完全多余地使用 memcpy,这是有道理的。此外,您的解决方案不必要地两次写入内存。
  • 这个。我不明白为什么这方面的每一秒答案都包括 memcpy。我这辈子从来没有使用过这个功能。
  • @informant09 有一些(非常罕见的)有效用例。但这不是其中之一。

标签: c++ stdvector


【解决方案1】:

你有两种方法来处理这个问题:

  1. 使用迭代器对而不是您必须创建的向量对象。这允许您稍后移动到容器而无需更改任何代码,但需要您将范围的开始和结束作为原始指针传递到数组中。

  2. 一开始就读入容器,根本不用担心数组。

【讨论】:

  • 您也可以读入一个数组,然后使用“采用”数组的自定义分配器构建vector - 请参阅stackoverflow.com/questions/21917529/…
  • @fwyzard,你是对的,你可以使用array_view。为此滥用分配器似乎......做作和意外。怎么会? resize函数是否还有另一个指向底层数组的指针变量?
猜你喜欢
  • 1970-01-01
  • 2020-02-19
  • 2020-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-22
  • 2022-01-07
  • 1970-01-01
相关资源
最近更新 更多