C++ vector容器:从基础到高级的全面指南
·
C++ vector容器:从基础到高级的全面指南
一、基础概念
vector 是 C++ 标准库中的序列容器,本质是动态数组:
- 自动管理内存,支持动态扩容
- 支持随机访问(时间复杂度 $O(1)$)
- 连续内存存储,与普通数组兼容
#include <vector>
using namespace std;
二、基本操作
-
初始化
vector<int> v1; // 空容器 vector<int> v2(5, 10); // 5个元素,每个值为10 vector<int> v3 = {1, 3, 5}; // 初始化列表 -
元素访问
v[2] = 7; // 随机访问(无边界检查) v.at(1) = 4; // 带边界检查(越界抛出异常) int first = v.front(); // 首元素 int last = v.back(); // 末元素 -
增删元素
v.push_back(8); // 尾部插入 v.pop_back(); // 尾部删除 v.insert(v.begin()+1, 9); // 指定位置插入 v.erase(v.begin()); // 删除指定位置
三、内存管理
-
容量与大小
v.size():当前元素数量v.capacity():当前分配的内存容量- 扩容规则:通常按 $2^n$ 增长(实现依赖)
-
手动控制
v.reserve(100); // 预分配100个元素内存 v.shrink_to_fit(); // 释放多余内存(C++11)
四、迭代器与算法
-
迭代器操作
for(auto it = v.begin(); it != v.end(); ++it) { cout << *it << " "; } -
STL算法应用
#include <algorithm> sort(v.begin(), v.end()); // 排序 auto pos = find(v.begin(), v.end(), 5); // 查找
五、高级特性
-
移动语义(C++11)
vector<string> v1 = {"a", "bb"}; vector<string> v2 = move(v1); // 移动构造(零拷贝) -
自定义分配器
template<typename T> using CustomAlloc = ...; // 自定义内存分配策略 vector<int, CustomAlloc<int>> v; -
异常安全
- 基本操作提供强异常保证
push_back()失败时容器状态不变
六、性能优化
-
避免频繁扩容
vector<LargeObj> data; data.reserve(10000); // 预先分配避免多次拷贝 -
高效删除技巧
// 删除所有奇数(避免移位开销) auto new_end = remove_if(v.begin(), v.end(), [](int x){ return x%2; }); v.erase(new_end, v.end()); -
多维向量
vector<vector<int>> matrix(5, vector<int>(3)); // 5x3矩阵
七、应用场景
- 替代原始数组
- 数据缓存池
- 图/树结构的邻接表
- 动态数据集合处理
最佳实践:
- 优先用
emplace_back()替代push_back()(避免临时对象)- 遍历时用
for(auto& x : v)(引用避免拷贝)- 多线程场景需自行加锁
// 综合示例:统计词频
vector<string> words = {"apple", "banana", "apple"};
unordered_map<string, int> freq;
for(const auto& word : words) {
freq[word]++;
}
通过合理应用 vector,可显著提升程序效率与可维护性。其接口设计遵循 RAII 原则,是 C++ 资源管理的典范实现。
更多推荐

所有评论(0)