C++ vector容器详解与实战
·
好的,下面我将为你详细讲解C++中的vector容器,从基础概念到核心操作,并附带代码示例。
一、vector 基础概念
vector是C++标准模板库(STL)中的动态数组,具有以下特性:
- 连续存储:元素在内存中连续存放,支持随机访问(时间复杂度 $O(1)$)。
- 动态扩容:当空间不足时,自动分配更大的内存(通常扩容至原大小的 $1.5$ 或 $2$ 倍)。
- 模板类:支持任意数据类型,例如
vector<int>、vector<string>。
二、初始化 vector
以下是常见的初始化方式:
#include <vector>
#include <iostream>
using namespace std;
int main() {
// 1. 空 vector
vector<int> vec1;
// 2. 指定大小和初始值
vector<int> vec2(5, 10); // 5个元素,每个值为10
// 3. 通过数组初始化
int arr[] = {1, 2, 3};
vector<int> vec3(arr, arr + 3);
// 4. 列表初始化 (C++11)
vector<int> vec4 = {4, 5, 6};
return 0;
}
三、核心操作
1. 添加元素
vec1.push_back(7); // 尾部插入元素
vec1.insert(vec1.begin() + 2, 8); // 在索引2处插入8
2. 删除元素
vec1.pop_back(); // 删除尾部元素
vec1.erase(vec1.begin() + 1); // 删除索引1处的元素
vec1.clear(); // 清空所有元素
3. 访问元素
cout << vec4[0]; // 通过下标访问(不检查越界)
cout << vec4.at(1); // 安全访问(越界抛出异常)
cout << vec4.front(); // 首元素
cout << vec4.back(); // 尾元素
4. 容量管理
cout << vec4.size(); // 当前元素数量
cout << vec4.capacity(); // 当前分配的存储空间大小
vec4.reserve(100); // 预分配空间(避免频繁扩容)
vec4.shrink_to_fit(); // 释放多余内存(C++11)
四、遍历 vector
1. 下标遍历
for (size_t i = 0; i < vec4.size(); ++i) {
cout << vec4[i] << " ";
}
2. 迭代器遍历
for (auto it = vec4.begin(); it != vec4.end(); ++it) {
cout << *it << " ";
}
3. 范围循环(C++11)
for (int num : vec4) {
cout << num << " ";
}
五、注意事项
- 扩容代价:
push_back可能导致内存重分配,频繁操作时建议用reserve()预分配空间。 - 迭代器失效:插入/删除元素可能使迭代器、指针或引用失效。
- 性能:
- 随机访问:$O(1)$
- 尾部插入/删除:平均 $O(1)$(分摊后)
- 中间插入/删除:$O(n)$
六、综合示例
#include <vector>
#include <algorithm> // 使用sort
#include <iostream>
using namespace std;
int main() {
vector<int> nums = {3, 1, 4, 1, 5};
nums.reserve(10); // 预分配空间
// 添加元素
nums.push_back(9);
nums.insert(nums.begin(), 2);
// 排序
sort(nums.begin(), nums.end());
// 遍历输出
for (int n : nums) {
cout << n << " ";
}
// 输出:1 1 2 3 4 5 9
return 0;
}
总结
vector 是最常用的STL容器之一,适用于需要频繁随机访问、尾部操作且数据量动态变化的场景。熟练掌握其操作和特性,能显著提升C++开发效率。下一期将深入探讨 vector 的底层实现与高级用法。
更多推荐


所有评论(0)