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

J C*_*per 4 c++ stl

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

std::vector<blah> v(n);
Run Code Online (Sandbox Code Playgroud)

哪个正确设置其容量n.但是当我继续填写vpush_back,它会自动调整大小2n.

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

Eti*_*tel 14

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

解决方案是分两步完成:

std::vector<blah> v; // create an empty vector
v.reserve(n); // increase capacity
Run Code Online (Sandbox Code Playgroud)

  • 对于它的价值,如果有人滥用载体并导致容量加倍,这将无法防范容量增长.如果你想要那种安全,你可能需要自己上课. (3认同)