预先设置向量的大小是否更有效? [重复]

问题描述 投票:0回答:4

如果可以的话,预先设置向量的大小是否更有效?我打算推回值。

c++ stl vector
4个回答
8
投票

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

对于相当不寻常的情况,它可能会改善所花费的时间消耗的空间量。当您使用

push_back
时,当空间不足时,它会按某个乘法因子增加大小,但如果您使用
reserve
,它可能会准确分配您需要的数量,而不是向上舍入到任何因子的下一个倍数它使用。


6
投票

如果您使用

.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;

是的,第二种方法通常比第一种方法更节省空间和时间。

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


5
投票


1
投票

© www.soinside.com 2019 - 2024. All rights reserved.