哪个会更有效,为什么?

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/

10-17 00:20