vector是C++ STL中支持随机访问、自动扩容、尾部高效增删的动态数组容器;支持空初始化、指定大小/值、初始化列表及拷贝构造;提供push_back/pop_back、at[]/front/back、clear等操作;需区分size与capacity,可用reserve/shrink_to_fit调控内存;推荐范围for或迭代器遍历。

vector 是 C++ 标准模板库(STL)中最常用、最灵活的动态数组容器,支持随机访问、自动扩容、尾部高效增删,是替代原始数组的首选。
一、基本定义与初始化
使用前需包含头文件 #include
- 空 vector:`std::vector
v;` - 指定大小并初始化为 0:`std::vector
v(5);` → 含 5 个 0 - 指定大小并初始化为某值:`std::vector
v(5, 9);` → 含 5 个 9 - 用初始化列表(C++11 起):`std::vector
v = {1, 2, 3, 4};` 或简写为 `std::vector v{1, 2, 3};` - 拷贝构造:`std::vector
v2 = v;` 或 `std::vector v2(v);`
二、常用增删查改操作
所有操作均在 O(1) 均摊时间完成(除 insert/erase 非尾部位置):
- 尾部插入:`v.push_back(10);`
- 尾部删除:`v.pop_back();`(不返回值,若为空则未定义行为)
-
访问元素:
• 安全带检查:`v.at(i)` → 越界抛 std::out_of_range
• 不检查直接访问:`v[i]` 或 `v.front()` / `v.back()` - 修改元素:`v[2] = 100;` 或 `v.at(2) = 100;`
- 清空全部:`v.clear();`(size 变 0,capacity 通常不变)
三、容量与大小控制
区分 size()(当前元素个数)和 capacity()(已分配内存能容纳的最大元素数):
立即学习“C++免费学习笔记(深入)”;
- 获取当前大小:`v.size()`
- 获取当前容量:`v.capacity()`
- 预留空间(避免多次扩容):`v.reserve(100);`(capacity ≥ 100)
- 收缩内存至当前 size(C++11):`v.shrink_to_fit();`(非强制,仅建议)
四、遍历与迭代器使用
推荐使用范围 for 或迭代器,避免下标越界风险:
- 范围 for(最简洁):
for (int x : v) { std::cout (只读)
for (int& x : v) { x *= 2; }(可修改) - 正向迭代器:
for (auto it = v.begin(); it != v.end(); ++it) { std::cout - 反向遍历:
for (auto rit = v.rbegin(); rit != v.rend(); ++rit) { std::cout
五、常见实用技巧
- 判断是否为空:用 `v.empty()`(比 `v.size() == 0` 更清晰、可能更快)
- 交换两个 vector:`v1.swap(v2);` 或 `std::swap(v1, v2);`(O(1) 时间,只交换内部指针)
-
初始化二维 vector:
`std::vector<:vector>> mat(3, std::vector(4, 0));` → 3×4 全 0 矩阵 -
从数组构造 vector:
`int arr[] = {1,2,3}; std::vectorv(arr, arr + 3);`









