填充向量时的效率

dan*_*ave 1 c++ stl vector

哪个更有效率,为什么?

vector<int> numbers;

for (int i = 0; i < 10; ++i)
    numbers.push_back(1);
Run Code Online (Sandbox Code Playgroud)

要么

vector<int> numbers(10,0);

for (int i = 0; i < 10; ++i)
    numbers[i] = 1;
Run Code Online (Sandbox Code Playgroud)

谢谢

Mat*_*lia 6

最快的将是:

vector <int> numbers(10, 1);
Run Code Online (Sandbox Code Playgroud)

至于你的两种方法,通常是第二种方法; 虽然第一个避免了构造函数中向量的第一次归零,但它从一开始就分配了足够的内存,避免了重新分配.

在基准测试中,我做了一段时间,即使你reserve在循环之前调用了第二种方法,因为push_back(如果容量对于另一个项目足够,并且必要时重新分配,则必须检查每个插入的开销)仍占主导地位.第二种方法的归零开销.

请注意,这适用于原始类型.如果您开始使用具有复杂复制构造函数的对象,通常最佳性能解决方案是reserve+ push_back,因为您避免了对默认构造函数的所有无用调用,这些调用通常比成本更高push_back.