vector的用法
C++ 中 vector
的用法
在C++编程中,vector
是一个非常重要且常用的容器。它是标准模板库(STL)的一部分,提供了动态数组的功能,可以根据需要自动调整其大小。本文将详细介绍 vector
的用法,包括其基本操作、常用方法以及一些高级用法。
什么是 vector
?
vector
是一个动态数组,它可以在运行时根据需要自动扩展或收缩。与普通数组不同,vector
的大小不是固定的。它提供了一些方便的函数来管理存储和访问元素。
引入 vector
在使用 vector
之前,需要包含头文件 <vector>
:
1 |
同时,为了方便使用标准库的功能,可以加入以下命名空间声明:
1 | using namespace std; |
一、vector
的初始化
可以有五种方式,举例如下:
vector<int> a(10);
- 定义了 10 个整型元素的向量,但没有给出初值,其值是不确定的。
vector<int> a(10, 1);
- 定义了 10 个整型元素的向量,且给出每个元素的初值为 1。
vector<int> a(b);
- 用 b 向量来创建 a 向量,整体复制赋值。
vector<int> a(b.begin(), b.begin() + 3);
- 定义了 a 的值为 b 中第 0 个到第 2 个(共 3 个)元素。
从数组中获得初值:
1
2int b[7] = {1, 2, 3, 4, 5, 9, 8};
vector<int> a(b, b + 7);
二、vector
对象的几个重要操作
a.assign(b.begin(), b.begin() + 3);
- 将 b 的 0 ~ 2 个元素构成的向量赋给 a。
a.assign(4, 2);
- 使 a 只含 4 个元素,且每个元素为 2。
a.back();
- 返回 a 的最后一个元素。
a.front();
- 返回 a 的第一个元素。
a[i];
- 返回 a 的第 i 个元素,当且仅当 a[i] 存在。
a.clear();
- 清空 a 中的元素。
a.empty();
- 判断 a 是否为空,空则返回 true,不空则返回 false。
a.pop_back();
- 删除 a 向量的最后一个元素。
a.erase(a.begin() + 1, a.begin() + 3);
- 删除 a 中第 1 个到第 2 个元素。
a.push_back(5);
- 在 a 的最后一个位置插入一个元素,值为 5。
a.insert(a.begin() + 1, 5);
- 在 a 的第 1 个位置插入数值 5。
a.insert(a.begin() + 1, 3, 5);
- 在 a 的第 1 个位置插入 3 个值为 5 的元素。
a.insert(a.begin() + 1, b + 3, b + 6);
- 在 a 的第 1 个位置插入 b 的第 3 个到第 5 个元素。
a.size();
- 返回 a 中元素的个数。
a.capacity();
- 返回 a 在内存中总共可以容纳的元素个数。
a.resize(10);
- 将 a 的现有元素个数调整至 10 个,多则删,少则补,其值随机。
a.resize(10, 2);
- 将 a 的现有元素个数调整至 10 个,多则删,少则补,其值为 2。
a.reserve(100);
- 将 a 的容量扩充至 100。
a.swap(b);
- 将 a 中的元素和 b 中的元素进行整体交换。
a == b;
- 比较两个向量是否相等,向量的比较操作还有
!=
,>=
,<=
,>
,<
。
- 比较两个向量是否相等,向量的比较操作还有
三、顺序访问 vector
的几种方式
向向量 a 中添加元素:
1
2
3vector<int> a;
for (int i = 0; i < 10; i++)
a.push_back(i);从数组中选择元素向向量中添加:
1
2
3
4int a[6] = {1, 2, 3, 4, 5, 6};
vector<int> b;
for (int i = 1; i <= 4; i++)
b.push_back(a[i]);从现有向量中选择元素向向量中添加:
1
2
3
4
5int a[6] = {1, 2, 3, 4, 5, 6};
vector<int> b;
vector<int> c(a, a + 4);
for (vector<int>::iterator it = c.begin(); it < c.end(); it++)
b.push_back(*it);从文件中读取元素向向量中添加:
1
2
3
4ifstream in("data.txt");
vector<int> a;
for (int i; in >> i;)
a.push_back(i);
四、几种重要的算法
使用时需要包含头文件 <algorithm>
:
sort(a.begin(), a.end());
- 对 a 中的元素进行从小到大排列。
reverse(a.begin(), a.end());
- 对 a 中的元素倒置,但不排序。
copy(a.begin(), a.end(), b.begin() + 1);
- 把 a 中的元素复制到 b 中,从 b.begin() + 1
的位置开始。
find(a.begin(), a.end(), 10);
- 在 a 中查找 10,若存在返回其在向量中的位置。
示例代码
以下是一个综合示例,展示了 vector
的各种基本操作:
1 |
|
结语
vector
是 C++ 中非常强大的一个容器,它提供了动态数组的功能,能够方便地进行元素的添加、删除和访问。在实际编程中,vector
被广泛应用于各种场景,掌握 vector
的用法对提升 C++ 编程能力非常有帮助。希望这篇文章能够帮助你更好地理解和使用 vector
。