如果可以的话,预先设置向量的大小是否更有效?我打算 push_back 值。
问问题
1429 次
4 回答
8
是的,它通常效率更高一些。不要期望有巨大的改进,但最坏的情况是它是无害的(显然假设你只保留你实际需要的空间)。
对于相当不寻常的情况,它可能会改善所花费的时间和消耗的空间量。当你使用push_back
它时,当你用完空间时,它会将大小增加一些乘法因子,但如果你使用reserve
它,它可能会准确分配你需要的数量,而不是四舍五入到它使用的任何因子的下一个倍数。
于 2012-04-11T15:24:49.793 回答
6
如果您.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;
是的,第二种方法通常比第一种更节省尺寸和时间。
第二种方法有时比第三种更省时。或不。你应该测量它,看看它是否重要。
于 2012-04-11T15:42:33.893 回答
5
是的,它通常会保留空间(容量),因此内存分配和数据移动较少,因为向量保证其数据连续存储。
于 2012-04-11T15:24:49.330 回答
1
是的,如果您可以预先保留适量的数据,效率会更高。当向量达到其容量时,它必须分配新的存储空间,然后性能就会受到影响。
于 2012-04-11T15:29:52.583 回答