1. std::vector 基本概念
- 定义:
std::vector是 C++ 标准库提供的动态数组容器,支持随机访问和动态扩容。 - 头文件:
#include <vector> - 特性:
- 元素在内存中连续存储(类似数组)。
- 自动扩容(当容量不足时重新分配内存)。
- 提供迭代器支持。
2. 构造函数(Constructors)
(1) 默认构造函数
vector<int> vec1; // 创建一个空vector,size=0,capacity=0
(2) 指定初始大小和默认值
vector<int> vec2(5); // 5个元素,默认初始化(int为0)
vector<double> vec3(5, 3.14); // 5个元素,每个值为3.14
(3) 通过迭代器范围构造
int arr[] = {1, 2, 3};
vector<int> vec4(arr, arr + 3); // 复制数组的[arr, arr+3)范围元素
(4) 拷贝构造函数
vector<int> vec5(vec4); // 深拷贝vec4的内容
3. 修改元素的成员函数
(1) push_back()
在末尾添加元素(拷贝语义):
vector<int> vec;
vec.push_back(10); // 添加元素10到末尾
(2) insert()
插入元素到指定位置,支持以下重载:
- 插入单个值:
vector<int> vec = {1, 3}; vec.insert(vec.begin() + 1, 2); // 在位置1插入2 → {1, 2, 3} - 插入多个相同值:
vec.insert(vec.end(), 2, 4); // 在末尾插入2个4 → {1, 2, 3, 4, 4} - 通过迭代器范围插入:
-
int arr[] = {5, 6}; vec.insert(vec.end(), arr, arr + 2); // 插入数组内容 → {1, 2, 3, 4, 4, 5, 6}
(3) erase()
删除指定位置或范围的元素:
- 删除单个元素:
vec.erase(vec.begin() + 1); // 删除位置1的元素 → {1, 3, 4, 4, 5, 6} - 删除范围元素:
vec.erase(vec.begin() + 3, vec.end()); // 删除位置3到末尾 → {1, 3, 4}
(4) clear()
清空所有元素(size=0,capacity不变):
vec.clear();
(5) assign()
重新分配元素(覆盖原有内容):
- 指定数量和值:
vec.assign(3, 10); // 3个10 → {10, 10, 10} - 通过迭代器范围:
int arr[] = {20, 30, 40}; vec.assign(arr, arr + 2); // 复制前2个元素 → {20, 30}
4. 访问元素的成员函数
(1) operator[]
通过下标访问(不检查越界):
int x = vec[0]; // 访问第一个元素
(2) at()
通过下标访问:
int y = vec.at(1); // 访问第二个元素
(3) front() 和 back()
访问首尾元素:
int first = vec.front(); // 第一个元素
int last = vec.back(); // 最后一个元素
5. 容量管理的成员函数
(1) size() 和 capacity()
获取元素数量和当前容量:
size_t s = vec.size(); // 当前元素数量
size_t c = vec.capacity(); // 当前分配的内存容量
(2) resize()
调整元素数量:
vec.resize(5); // 调整size=5,多出的元素默认初始化(int为0)
vec.resize(3, 100); // 调整size=3,若需要新增元素则初始化为100
(3) reserve()
预分配内存(避免多次扩容):
vec.reserve(100); // 分配至少容纳100个元素的内存
6. 迭代器操作
-
begin()和end():for (vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) { cout << *it << " "; } -
rbegin()和rend()(反向迭代器):for (vector<int>::reverse_iterator rit = vec.rbegin(); rit != vec.rend(); ++rit) { cout << *rit << " "; }
7. 注意事项
- 扩容机制:当
size() == capacity()时,push_back或insert会触发扩容。 - 迭代器失效:插入或删除操作可能导致迭代器失效(这个会在我后续的文章中详细解决迭代器失效的问题)。
10万+

被折叠的 条评论
为什么被折叠?



