预先设置向量的大小是否更有效?

时间:2012-04-11 15:22:47

标签: c++ stl vector

如果你能够,提前设置矢量的大小是否更有效?我打算推送值。

4 个答案:

答案 0 :(得分:7)

是的,它通常效率更高一些。不要指望有一个巨大的改进,但最坏的情况是它是无害的(显然假设你只保留你实际需要的空间)。

对于一个相当不寻常的情况,它可能会改善消耗的空间量所花费的时间。当你使用push_back时,当你的空间不足时,它会增加一些乘法因子的大小,但如果你使用reserve,它可能会精确分配你需要的数量,而不是四舍五入到下一个它使用的任何因素的倍数。

答案 1 :(得分:5)

是的,它通常会保留空间(容量),因此可以减少内存分配和数据移动,因为向量可以保证其数据连续存储。

答案 2 :(得分:5)

如果您使用.push_back()来存储值,则不正确至"预先设置向量的大小"使用.resize()成员函数。相反,您可以使用.reserve()成员函数预先设置向量的容量

以下是三种正确的方法:

// 1) Do nothing initially, use .push_back
std::vector<int> v;
v.push_back(1); v.push_back(2);

// 2) Set the capacity initially, use .push_back
std::vector<int> v;
v.reserve(2);
v.push_back(1); v.push_back(2);

// 3) Set the size initiallly, use subscripts
std::vector<int> v(2); // Set the size in construction
v.resize(2);             // OR set the size by a call to .resize()
v[0] = 1; v[1] = 2; 

是的,第二种方法通常比第一种方法更具有尺寸和时间效率。

第二种方法有时比第三种方法更节省时间。或不。你应该测量一下它是否重要。

答案 3 :(得分:1)

是的,如果您可以预先保留适量的数据,效率会更高。 当向量达到其容量时,它将不得不分配新的存储,然后会有性能损失。