清理每个循环迭代的向量.什么是最有效的内存方式?

Nai*_*ler 5 c++ loops memory-management vector memory-optimization

我有一个关于std :: vector的问题.

我有一个非常内存密集的算法,我预测到预测矢量大小并提前为矢量保留足够的内存将帮助我减少内存使用量.

以下哪项更好:

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

或这个:

std::vector my_vector;
for ( ... ) {
  my_vector.clear();
  my_vector.reserve(stuff_count);
  // Do stuff , and append stuff to my_vector.
}
Run Code Online (Sandbox Code Playgroud)

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

非常感谢你提前!

sha*_*oth 11

使用第一个变体,您可以在每次迭代时重新分配向量的缓冲区 - 这通常非常昂贵.使用第二个变体,您只需偶尔重新分配.第二种变体更好,因为速度是您的首要任务.

你不清楚问题的元素数量来自何处.也许你甚至可以快速计算所有迭代的最大元素数,将其设置为缓冲区大小并且没有重新分配.


Pet*_*ham 6

我预测,预测矢量大小并预先为矢量保留足够的内存将有助于减少内存使用量.

尝试并表现得像工程师而不是算命先生.创建一个测试,并测量差异.


Mau*_*rry 5

第二个可能会稍快,但我发现第一个更清洁.


小智 5

由于代码中的差异微不足道,为什么不测试这两种方法,看看哪种方法最适合您的特定应用?