std::vector 基础:push_back、size、capacity
创建、扩展和检查向量,并理解容量与大小之间的区别
std::vector 基础:push_back、size、capacity 是 CoddyKit 上的免费 C++ Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C++ Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C++ Academy 课程共包含 4 节课。
为什么使用 std::vector?
std::vector 是 C++ 中的默认容器。它会自动增长,为您管理内存,并提供 O(1) 的随机访问。除非有明确理由,否则请使用它。
包含头文件并声明
包含 <vector>,并将元素类型声明为模板参数。
#include <vector>
std::vector<int> nums;
std::vector<std::string> names = {"Ada", "Bob"};初始化形式
启动 vector 的几种方式:
std::vector<int> a; // empty
std::vector<int> b(5); // 5 zeros
std::vector<int> c(5, 42); // 5 copies of 42
std::vector<int> d{1, 2, 3}; // {1,2,3}
std::vector<int> e(d); // copy of dpush_back:在末尾追加
使用 push_back 在末尾添加元素。均摊复杂度为 O(1)。
std::vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);emplace_back:就地构造
emplace_back 会将参数转发给元素构造函数,不会创建临时对象。对于非平凡类型,它通常会稍快一些。
std::vector<std::pair<int,int>> v;
v.emplace_back(1, 2); // constructs a pair in placesize 与 capacity
两个不同的概念:
- size — 当前存储的元素数量
- capacity — 无需重新分配即可容纳的元素数量
capacity 会分块增长,通常每次翻倍。
查看 size 和 capacity
使用对应的成员函数:
std::vector<int> v;
for (int i = 0; i < 10; ++i) {
v.push_back(i);
std::cout << "size=" << v.size() << " capacity=" << v.capacity() << "\n";
}reserve:预先分配容量
如果您知道将要添加多少个元素,请先调用 reserve,以避免反复重新分配。
std::vector<int> v;
v.reserve(1000000); // preallocate
for (int i = 0; i < 1000000; ++i) v.push_back(i);shrink_to_fit:释放内存
删除大量元素后,可以使用 shrink_to_fit 释放未使用的容量。此行为不是强制性的,实现可能会保留额外空间。
访问元素
四种方式:
v[i]— 不进行检查v.at(i)— 检查边界,越界时抛出异常v.front()— 第一个元素v.back()— 最后一个元素
判空与清空
使用 empty() 检查是否为空。使用 clear() 移除所有元素,但容量不会改变。
快速检查
为什么 push_back 的均摊时间复杂度是 O(1)?
回顾
std::vector 是一种可增长数组,支持 O(1) 的随机访问。size() 表示元素数量;capacity() 表示存储容量。当已知最终大小时,reserve() 可以避免重新分配。
常见问题解答
「std::vector 基础:push_back、size、capacity」课时是免费的吗?
是的 — 「std::vector 基础:push_back、size、capacity」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C++ Academy 课程的其余内容,请升级到 CoddyKit PRO。 C++ Academy 课程共包含 4 节课。
「std::vector 基础:push_back、size、capacity」这节课中我会学到什么?
创建、扩展和检查向量,并理解容量与大小之间的区别 你通过在浏览器中直接运行的动手代码来练习 C++ Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 C++ Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 C++ Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「std::vector 基础:push_back、size、capacity」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 C++ Academy 课中编写并运行代码吗?
能。每节 C++ Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- std::vector 基础:push_back、size、capacity
- 遍历向量:索引、范围 for、迭代器
- 修改向量:insert、erase、clear
- vector、std::array 与 C 数组的比较