前言
在 C++ 标准模板库(STL)中,vector 是最常用也最灵活的容器之一。它作为动态数组,既保留了数组随机访问的高效性,又具备动态扩容的灵活性,在实际开发中有着广泛的应用。
本文将从 vector 的构造方法入手,逐步深入到迭代器使用、空间管理、元素操作等核心知识点,讲解各种 API 的用法细节,并通过模拟实现代码帮助读者理解其底层工作原理。针对 vector 使用中常见的迭代器失效、边界访问等问题进行详细说明,并结合典型算法题目展示 vector 在实际场景中的应用。
构造 vector 的几种方法
vector 支持多种构造方式,例如指定初始大小和值,或通过迭代器区间初始化。
vector<int> v1(10, 1);
vector<int> v3(v1.begin(), v1.end());
对于嵌套 vector,需注意 resize 时的层级关系:
vector<vector<int>> vv;
vv.resize(n);
for(auto& row : vv) row.resize(m);
vector 的迭代器
- begin: 获取第一个元素的迭代器
- end: 获取最后一个元素的下一个位置的迭代器
- rbegin: 获取最后一个元素的反向迭代器
- rend: 获取第一个元素的上一个位置的反向迭代器
注意:vector 的迭代器不一定是原生指针;反向迭代器 ++ 和迭代器 ++ 的移动方向相反;范围 for 循环配合反向迭代器可倒序遍历。
vector 的空间操作
- size: 获取数据个数
- capacity: 获取容量大小
- empty: 判断是否为空
- resize: 改变 vector 的 size 和 capacity
- reserve: 仅改变 vector 的 capacity
注意:使用 [] 访问时依据 size 判断越界。若 capacity 为 10 而 size 为 1,访问索引 9 会报错。
vector 获取位置
- operator[]: 一般用于访问
- front: 返回容器中第一个元素的引用
- back: 返回容器最后一个元素的引用
- data (C++11): 获取 vector 内部存储元素的连续内存的首地址
vector 的增删查改
- push_back: 尾插
- pop_back: 尾删
- insert: 插入元素
- erase: 删除指定位置的数据,返回指向被删除元素下一个元素的迭代器
- swap: 交换两个 vector 的数据空间
- emplace: 原地构造元素(涉及右值引用)
注意:vector 本身没有 find 成员函数,但可使用 std::find 算法查找。区间操作通常遵循左闭右开原则。


