我有一个std :: vector,我知道它永远不会增长 - 它总是会有n
个元素(不幸的是,n
在编译时是不知道的所以我不能使用std :: array)。我能做到:
std::vector<blah> v(n);
正确地将其容量设置为n
。但是,当我继续使用v
填充push_back
时,它会自动调整为2n
。
我意识到这是不成熟的优化,但它让我烦恼。有没有办法设置最大尺寸或什么?
答案 0 :(得分:13)
该构造函数不会将向量的容量设置为n
,而是创建一个包含n
对象的向量,该对象由blah
的默认构造函数构造。对于具有Java或.NET背景的人来说,这可能会令人困惑,其中ArrayList
和List<T>
都有一个设置初始容量的构造函数。
解决方案是分两步完成:
std::vector<blah> v; // create an empty vector
v.reserve(n); // increase capacity