哪个更有效率,为什么?
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)
谢谢
最快的将是:
vector <int> numbers(10, 1);
Run Code Online (Sandbox Code Playgroud)
至于你的两种方法,通常是第二种方法; 虽然第一个避免了构造函数中向量的第一次归零,但它从一开始就分配了足够的内存,避免了重新分配.
在基准测试中,我做了一段时间,即使你reserve在循环之前调用了第二种方法,因为push_back(如果容量对于另一个项目足够,并且必要时重新分配,则必须检查每个插入的开销)仍占主导地位.第二种方法的归零开销.
请注意,这适用于原始类型.如果您开始使用具有复杂复制构造函数的对象,通常最佳性能解决方案是reserve+ push_back,因为您避免了对默认构造函数的所有无用调用,这些调用通常比成本更高push_back.
| 归档时间: |
|
| 查看次数: |
3006 次 |
| 最近记录: |