防止std :: vector在push_back上调整大小

时间:2011-08-02 21:13:17

标签: c++ stl

我有一个std :: vector,我知道它永远不会增长 - 它总是会有n个元素(不幸的是,n在编译时是不知道的所以我不能使用std :: array)。我能做到:

std::vector<blah> v(n);

正确地将其容量设置为n。但是,当我继续使用v填充push_back时,它会自动调整为2n

我意识到这是不成熟的优化,但它让我烦恼。有没有办法设置最大尺寸或什么?

1 个答案:

答案 0 :(得分:13)

该构造函数不会将向量的容量设置为n,而是创建一个包含n对象的向量,该对象由blah的默认构造函数构造。对于具有Java或.NET背景的人来说,这可能会令人困惑,其中ArrayListList<T>都有一个设置初始容量的构造函数。

解决方案是分两步完成:

std::vector<blah> v; // create an empty vector
v.reserve(n); // increase capacity