我有一个数组,比如ARR,并且已知ARR中的对象总数。 我想将ARR中每个对象的属性复制(放入)到STL向量,比如说VEC。
一种方法是迭代ARR
VEC.pushback(ARR[i].att);
另一种方式是
VEC.resize(ARR.size());
VEC[i] = ARR[i].att;
他们在运行时性能方面有所不同吗?哪一个更好?感谢。
后续行动:我想为有兴趣的人提供一些实验结果。 我尝试了(1)resize()+'='和(2)reserve()+ push_back()方法,将50000个整数放入STL向量中。
(1) takes 0.000201s;
(2) takes 0.000229s.
答案 0 :(得分:2)
之前调用resize()
(或reserve()
)可能会在您添加新项目时节省一些调整大小。无论如何,你已经知道了项目的数量,所以它更有意义。
使用resize()
,您将拥有默认构造步骤,我将使用reserve()
来阻止重新分配和push_back()
(以及在C ++ 11中,emplace_back()
如果你的编译器支持它)
答案 1 :(得分:0)
我认为您应该尝试使用QueryPerformanceCounter()函数或在执行前启动计时器,并在两种情况下执行后停止。 您可以看到时间上的差异,并可以评估每个方案花费的时间,然后确定哪个是更好的解决方案..
答案 2 :(得分:0)
如果你想要复制数组的数据到矢量,你可以简单地做VEC.assign(ARR,ARR + ARR_size) 如果ARR是一个简单的数组,或者是VEC.assign(ARR.begin(),ARR.end())如果arr是任何其他序列 这将是非POD类型的最快方式