我对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 的缓冲区,这通常非常昂贵。使用第二个变体,您仅会偶尔重新分配。第二种方法更好,因为速度是您的首要任务。
您不清楚从哪里知道元素数量的问题。甚至您甚至可以快速计算所有迭代的最大元素数,将其设置为缓冲区大小并且没有重新分配。