《C++ vector类》
一、基础概念
- C++标准模板库(STL)中的动态数组容器,可自动调整大小。
- 与普通数组的区别:无需预先指定大小,支持动态增删元素。
#include <vector> // 必须包含的头文件 using namespace std; // 通常使用std命名空间(或显式写std::vector)
二、函数操作
1. 创建与初始化
默认构造:
vector<int> v1; // 空vector
指定大小与初始值:
vector<int> v2(5); // 5个元素,默认初始化为0 vector<int> v3(5, 10); // 5个元素,每个值为10
从其他容器或数组初始化:
int arr[] = {1, 2, 3}; vector<int> v4(arr, arr + 3); // 从数组拷贝 vector<int> v5 = {1, 2, 3}; // C++11初始化列表
2. 访问元素
通过索引访问(随机访问):
cout << v1[0]; // 不检查边界(快速但危险) cout << v1.at(0); // 检查边界(安全但稍慢)
迭代器访问:
for (auto it = v1.begin(); it != v1.end(); ++it) { cout << *it << " "; }
范围for循环(C++11):
for (int x : v1) { cout << x << " "; }
3. 修改大小
添加元素:
v1.push_back(10); // 尾部添加 v1.insert(v1.begin() + 1, 20); // 在指定位置插入
删除元素:
v1.pop_back(); // 删除尾部元素 v1.erase(v1.begin() + 1); // 删除指定位置元素 v1.clear(); // 清空所有元素
调整容量:
v1.resize(10); // 调整大小为10(新元素默认初始化) v1.reserve(100); // 预留空间(避免频繁重新分配)
4. 容量与大小
常用成员函数:
v1.size(); // 当前元素数量 v1.capacity(); // 当前分配的存储空间大小 v1.empty(); // 是否为空 v1.max_size(); // 理论最大容量
三、注意事项
1.迭代器失效
在vector中间插入/删除元素时,所有迭代器可能失效(需重新获取)。
尾部插入通常不会使迭代器失效(除非重新分配内存)。
2.性能权衡
push_back平均时间复杂度为O(1),但偶尔因扩容导致O(n)。
频繁插入/删除时,考虑std::list或std::deque。
3.与数组的对比
优势:动态大小、内置函数简化操作。
劣势:额外开销(存储大小、容量等信息)
浙公网安备 33010602011771号