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

标签 c++ stl

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

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

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

我意识到这是过早的优化,但它困扰着我。有没有办法设置最大大小之类的?

最佳答案

该构造函数没有将 vector 的容量设置为 n ,而是创建一个包含 n 的 vector 用 blah 构造的对象的默认构造函数。这可能会让具有 Java 或 .NET 背景的人感到困惑,其中 ArrayListList<T>两者都有一个设置初始容量的构造函数。

解决方案是分两步进行:

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

关于c++ - 防止 std::vector 在 push_back 上调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6918684/

相关文章:

C++ large deque - 程序需要很长时间才能退出?

c++ - 自定义 std::allocator 用于替换了 operator new 的类

c++ - 在容器的两端插入或删除后,std::deque 的迭代器是否会失效?

NAO Robot 上的 C++ - 如何运行我的 C++ 代码?

c++ - stoi(char*) 是否必须构造一个临时字符串?

c++ - 从多个线程调用 std::shuffle

c++ - 如何在单个 Visual Studio 项目中构建多个 .dll 文件(.mexw32 文件)?

c++ - 奇怪的 c++ 运算符(运算符 unsigned short())

c++ - 在 C++ Builder 中使用 COM

c++ - 复数的共轭函数