c++ - 与在 C++ 中使用 push_back 相比,声明具有大小的向量是否提供任何改进
问题描述
假设我们知道我们将需要的向量的大小(比如“n”)。
使用是否比逐个使用vector<int> Array(n);
提供任何改进?Array.push_back(element)
推荐哪个,为什么?
解决方案
和
vector<int> Array(n);
您创建一个包含n
元素的向量,这些元素所需的所有内存都会立即分配。
当你使用例如
Array.push_back(value);
然后需要调整向量的大小,这可能意味着必须重新分配内存并且必须将所有内容复制到新内存中。
您可以预先分配(或保留)内存,而不是创建具有设定大小的数组:
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
当您有一个无法默认构造的对象向量时,这很有用。
需要学习的重要概念:向量大小及其容量以及它们之间的区别。
容量是向量已为其分配内存的元素数。
大小是向量中的当前元素数。
容量与大小不同是很常见的。并且它必须始终是真实的capacity >= size
。
推荐阅读
- android - 从 URI 获取图像路径时出现空指针异常错误
- python - 如何在单独的进程中运行 Python 自定义对象,所有这些都在共享事件队列上工作?
- java - 使用 mysql 驱动程序使用 mysql 数据库设置 spring-boot 项目
- angularjs - 在 Ionic3 中使用 InAppbrowser 打开浏览器时如何禁用后退按钮
- javascript - 使用比较表。添加多个表格时的移动响应问题?
- java - 为什么 nextLine() 在我的 Java 程序中不一直等待输入?
- emacs - 如何在我的程序中清除 Emacs 回显区域?
- ansible - 从 Ansible 中的地图列表中提取属性列表的正确方法
- codeblocks - 为什么我的 MSYS2/MinGW64 设置链接没有 -l 指令的 SDL2,而不是 SDL2_ttf?
- npm - 为什么`npm install` 在版本号中添加/删除插入符号(^)?