c++ - 与C++中使用push_back相比,声明具有大小的 vector 是否有任何改进?

标签 c++ vector stl dynamic-memory-allocation

让我们说我们知道我们将需要的 vector 的大小(例如“n”)。

与逐一使用oj​​it_code相比,使用vector<int> Array(n);是否有任何改进?

推荐哪个,为什么?

最佳答案


vector<int> Array(n);

您创建一个包含n元素的 vector ,这些元素所需的所有内存将立即分配。

当您使用例如
Array.push_back(value);

然后需要调整 vector 的大小,这可能意味着必须重新分配内存,并且所有内容都必须复制到新内存中。

除了创建一个具有固定大小的数组,您还可以预分配(或reserve)内存:
vector<int> Array;  // An empty vector
Array.reserve(n);   // Reserve memory, but keep the size as zero (it's still empty)
Array.push_back(value);  // No reallocation needed, size is now one

当您具有无法默认构造的对象 vector 时,这很有用。

要学习的重要概念: vector 大小及其容量以及它们之间的区别是什么。

容量是 vector 已为其分配内存的元素数。

大小是 vector 中当前元素的数量。

容量与大小不同是很常见的。并且capacity >= size必须始终是真实的。

关于c++ - 与C++中使用push_back相比,声明具有大小的 vector 是否有任何改进?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62128083/

相关文章:

C++ STL,常量迭代器,find()

c++ - Minko - 相机和旋转角度

c++ - 如何遍历类的实例集合并访问其模板成员

c++ - 将 vector 成员变量返回给外部类的最佳方法

c++ - F1后跳转到QtCreator中正确的C++ STL文档页面?

c++ - 更改字符串语言环境

c++ - 关于类模板和函数模板SFINAE的问题

c++ - 如何确定 TCP 套接字因中间网络断开而终止所需的最长时间?

c++ - 'ostream_iterator<int>' 的初始化没有匹配的构造函数

c++ - 在 C++ 中,调试断言失败窗口弹出 & 我得到 vector 迭代器不兼容的错误运行时