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

pin*_*ngu 3 c++ stl vector

如果你能够,是否更有效地预先设置矢量的大小?我打算推送值.

Jer*_*fin 7

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

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


Joe*_*Joe 5

是的,它通常会保留空间(容量),因此存储器分配和数据移动较少,因为矢量保证其数据连续存储.


Rob*_*obᵩ 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; 
Run Code Online (Sandbox Code Playgroud)

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

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