我对std::vector有疑问。

我有一个非常占用内存的算法,我可以预见,预测 vector 大小并提前为 vector 保留足够的内存将对减少内存使用量有很大帮助。

以下哪个更好:

for ( ... ) {
  std::vector<Type> my_vector;
  my_vector.reserve(stuff_count);
  // Do stuff , and append stuff to my_vector.
}

或这个:
std::vector my_vector;
for ( ... ) {
  my_vector.clear();
  my_vector.reserve(stuff_count);
  // Do stuff , and append stuff to my_vector.
}

请告诉我哪个最好,或者是否有更好的做事方法。

提前非常感谢您!

最佳答案

使用第一个变体,您可以在每次迭代时重新分配 vector 的缓冲区,这通常非常昂贵。使用第二个变体,您仅会偶尔重新分配。第二种方法更好,因为速度是您的首要任务。

您不清楚从哪里知道元素数量的问题。甚至您甚至可以快速计算所有迭代的最大元素数,将其设置为缓冲区大小并且没有重新分配。

10-07 12:02
查看更多