简单介绍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 都能提供强大的支持。

欢迎使用66资源网
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
7. 本站有不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!

66源码网 » C++ 中vector学习标准模板库

提供最优质的资源集合

立即查看 了解详情