哪个会更有效,为什么?
vector<int> numbers;
for (int i = 0; i < 10; ++i)
numbers.push_back(1);
要么
vector<int> numbers(10,0);
for (int i = 0; i < 10; ++i)
numbers[i] = 1;
谢谢
最佳答案
最快的是:
vector <int> numbers(10, 1);
至于你的两种方法,通常是第二种。尽管第一个避免在构造函数中对 vector 进行第一个清零,但它从一开始就分配了足够的内存,从而避免了重新分配。
在前段时间,在基准测试中,即使您在循环之前调用了
reserve
,第二种方法还是获胜了,因为push_back
的开销(必须检查每个插入的容量是否足以容纳另一个项目,并在必要时重新分配)主要在第二种方法的置零开销上。注意,这适用于基本类型。如果您开始使用复杂的副本构造函数作为对象,那么通常,性能最佳的解决方案是
reserve
+ push_back
,因为您避免了对默认构造函数的所有无用的调用,这些调用通常比push_back
的开销大。关于c++ - 填充 vector 时的效率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9121454/