我有一个std::vector,我知道它永远不需要扩展 - 它将始终具有n个元素(不幸的是,n在编译时未知,因此我无法使用std :: array)。 我可以这样做:
std::vector<blah> v(n);
设置n
的容量是正确的。但是,当我使用push_back
填充v
时,它会自动调整大小为2n
。
我知道这是过早的优化,但这让我感到困扰。有没有一种方法可以设置最大大小或其他东西?
该构造函数并不设置向量的容量为n
,而是创建一个包含n
个由blah
的默认构造函数构造的对象的向量。对于具有Java或.NET背景的人来说,这可能会令人困惑,因为ArrayList
和List<T>
都有一个可以设置初始容量的构造函数。
解决方法是分两步进行:
std::vector<blah> v; // create an empty vector
v.reserve(n); // increase capacity
// UB
if (v.size() != v.capacity()) {
// assume no resize
v.push_back(something);
}