如果可以的话,预先设置向量的大小是否更有效?我打算推回值。
是的,通常效率更高一些。不要期望有巨大的改进,但在最坏的情况下它是无害的(显然假设您只保留实际需要的空间)。
对于相当不寻常的情况,它可能会改善所花费的时间和消耗的空间量。当您使用
push_back
时,当空间不足时,它会按某个乘法因子增加大小,但如果您使用 reserve
,它可能会准确分配您需要的数量,而不是向上舍入到任何因子的下一个倍数它使用。
如果您使用
.push_back()
来存储值,则使用 .resize()
成员函数“预先设置向量的 size”是“不正确的”。相反,您可以使用 .reserve()
成员函数预先设置向量的 capacity。以下是三种正确的做法:
// 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;
是的,第二种方法通常比第一种方法更节省空间和时间。
第二种方法有时比第三种方法更省时。或不。您应该测量一下它是否重要。