C++ 中vector学习标准模板库
简单介绍vector:
Vector 是 C++ 标准模板库(STL)中最重要且最常用的容器之一,它提供了动态数组的功能,能够根据需要在运行时动态调整大小。本文将全面讲解 vector 的各种功能和用法。
1. Vector 基本概念
1.1 什么是 Vector
Vector 是一个序列容器,实现了动态数组的功能,具有以下特点:
可以存储相同类型的元素
元素在内存中是连续存储的
可以动态增长和缩小
提供了快速的随机访问
在尾部插入和删除元素效率高
1.2 Vector 的优势
与普通数组相比,vector 具有明显优势:
动态大小:不需要预先指定大小
内存管理:自动处理内存分配和释放
丰富接口:提供大量便捷的操作方法
安全性:提供边界检查(at()方法)
2. Vector 的基本操作
2.1 头文件和声明
#include <vector> // 必须包含的头文件
// 声明方式
vector<int> v1; // 空vector
vector<double> v2(10); // 10个元素的vector
vector<string> v3(5, “hi”); // 5个”hi”的vector
vector<int> v4 = {1, 2, 3}; // 初始化列表
2.2 常用基本操作
vector<int> v;
// 添加元素
v.push_back(10); // 在末尾添加元素
v.emplace_back(20); // C++11更高效的添加方式
// 访问元素
int a = v[0]; // 通过下标访问(不检查边界)
int b = v.at(1); // 通过at访问(会检查边界)
// 修改元素
v[0] = 100;
// 删除元素
v.pop_back(); // 删除最后一个元素
// 大小信息
int size = v.size(); // 元素个数
bool empty = v.empty(); // 是否为空
int cap = v.capacity(); // 当前容量
3. Vector 的迭代器
迭代器提供了遍历 vector 的标准方式:
vector<int> v = {1, 2, 3, 4, 5};
// 正向迭代器
for(auto it = v.begin(); it != v.end(); ++it) {
cout << *it << ” “;
}
// 反向迭代器
for(auto rit = v.rbegin(); rit != v.rend(); ++rit) {
cout << *rit << ” “;
}
// C++11范围for循环
for(int num : v) {
cout << num << ” “;
}
4. Vector 的常用成员函数
4.1 容量相关
vector<int> v;
v.reserve(100); // 预分配空间,避免多次重新分配
v.shrink_to_fit(); // 减少容量以匹配大小(C++11)
5. Vector 的高级用法
5.1 排序和查找
#include <algorithm>
vector<int> v = {5, 3, 1, 4, 2};
// 排序
sort(v.begin(), v.end()); // 升序
sort(v.begin(), v.end(), greater<int>()); // 降序
// 查找
auto it = find(v.begin(), v.end(), 3);
if(it != v.end()) {
cout << “Found at position: ” << it – v.begin();
}
5.2 二维 Vector
// 声明二维vector
vector<vector<int>> matrix;
// 初始化5×5矩阵
matrix.resize(5, vector<int>(5, 0));
// 访问元素
matrix[2][3] = 10;
// 遍历
for(const auto& row : matrix) {
for(int num : row) {
cout << num << ” “;
}
cout << endl;
}
5.3 Vector 的性能优化
vector<int> v;
// 1. 预先分配足够空间
v.reserve(1000); // 避免多次扩容
// 2. 使用emplace_back代替push_back
v.emplace_back(10); // 避免临时对象构造
// 3. 减少不必要的拷贝
vector<int> createLargeVector() {
vector<int> temp(1000000);
return temp; // 返回值优化(RVO)会避免拷贝
}
// 4. 使用swap来真正释放内存
vector<int>().swap(v); // 清空并释放所有内存
6. Vector 的常见应用场景
动态数据集合:当数据量不确定时
需要频繁在尾部增删:如实现栈结构
需要随机访问:通过索引快速访问元素
替代原始数组:更安全更方便
算法实现:如图的邻接表表示
7. Vector 的注意事项
迭代器失效:在修改vector后,之前获取的迭代器可能失效
插入删除效率:在中间位置插入删除效率较低
内存连续性:虽然元素连续存储,但扩容时会重新分配内存
容量与大小:size()是元素个数,capacity()是实际分配的空间大小
8. Vector 与其他容器的比较
特性 Vector List Deque
随机访问 快 慢 快
头部插入 慢 快 快
尾部插入 快 快 快
中间插入 慢 快 慢
内存连续性 连续 不连续 部分连续
9. 总结
Vector 是 C++ 中最灵活、最实用的容器之一,它结合了数组的高效随机访问和动态大小的优势。掌握 vector 的各种用法和优化技巧,可以显著提高 C++ 编程的效率和质量。无论是简单的数据存储还是复杂的算法实现,vector 都能提供强大的支持。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
7. 本站有不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!
66源码网 » C++ 中vector学习标准模板库