向量
Coddy C++ 标准模板库 课程的第 5 课,共 23 课。
Vector 是 C++ STL 中一种动态大小的数组。插入或删除元素时,它能够自动调整大小。vector 的元素存储在连续的存储空间中,因此可以使用迭代器访问、修改和遍历。
在 vector 中,数据从末尾插入。它是一种比数组更慢的数据结构,但速度足以用于解决问题,甚至能应对竞赛级别的复杂度。
在 C++ 中,包含 #include <vector> 就可以使用 vector。
!注意:C++ 中有一个名为 bits/stdc++.h 的非标准头文件。你可以在 C++ 文件开头包含它,然后使用任何标准库元素,而无需逐个包含相应的头文件。(#include <bits/stdc++.h)
#include <iostream>
#include <vector>
using namespace std;
int main()
{
// 代码……
return 0;
}#include <bits/stdc++.h>
using namespace std;
int main()
{
// 代码……
return 0;
}那么,怎样创建、初始化和使用vector呢?我们使用关键字 vector<>。在 <> 中填写变量类型,也就是要存储在 vector 中的元素的数据类型。如果要声明一个存储整数的 vector,就使用 vector<int>。
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> numbers = {1, 2, 3};
cout << numbers[0];
return 0;
}Output:
1如上所示,vector 的行为和数组完全一样。我们声明了一个 int 类型的 vector,名称为 numbers,并用一些值对它进行了初始化。然后使用方括号 [] 输出第一个元素,也就是索引为 0 的元素。
我们使用函数 push_back() 在 vector 末尾插入元素。 push_back() 方法会在 vector 的最后一个元素之后添加一个新元素。
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> numbers = {1, 2, 3};
cout << numbers[2] << endl;
numbers.push_back(10);
cout << numbers[3];
return 0;
}Output:
3
10如你所见,我们通过 vector 名称、一个点号 . 来调用这个方法。使用 push_back() 方法后,vector 的大小会增加 1。
我们还可以使用 size() 方法获取 vector 中的元素数量。
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> numbers = {1, 2, 3};
cout << numbers.size();
return 0;
}Output:
3如果我们不知道 vector 中有多少个元素,但想遍历它,通常会使用 size() 方法。因此,我们会在循环条件中使用 vector.size()。
vector 数据结构有许多功能和特性,例如,函数 resize(n) 会将 vector 的大小调整为 n,此外还有很多其他功能。不过,等我们学习算法和函数时再详细介绍它们。目前只要记住,vector 是动态大小的数组,了解如何声明它,以及如何使用 push_back() 方法插入新元素即可。
示例:下面是一个示例程序,用户可以持续输入数字,直到输入 -1。由于我们不知道会有多少个元素,因此会使用循环和 vector 来存储这些数字。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int x;
vector<int> numbers;
while(x != -1)
{
cin >> x;
numbers.push_back(x);
}
return 0;
}每一课都会提供一张表格,列出对应 C++ 数据结构可用的方法。
Vector 方法
| 方法 | 功能 |
| push_back() | 在 vector 末尾添加一个新元素 |
| pop_back() | 从 vector 中删除最后一个元素 |
| swap() | 交换指定的元素 |
| front() | 返回第一个元素的引用 |
| back() | 返回最后一个元素的引用 |
| empty() | 判断 vector 是否为空 |
| clear() | 删除 vector 中的所有元素 |
| resize() | 修改 vector 的大小 |
| size() | 返回 vector 中的元素数量 |
| insert() | 在指定位置插入指定元素 |
挑战
简单从输入中输入正数,直到输入 -1。之后,最后输入的自然数 N 就是你的上下文数。输出所有能够整除 N 且没有余数的元素。
例如:
Input
5
10
15
-1
100Output
5
10因为 100 能被 5 和 10 整除,但不能被 15 整除。
Input
2
4
6
8
-1
12Output
2
4
6因为 12 能被 2、4 和 6 整除,但不能被 8 整除。
亲手试试
#include <vector>
#include <iostream>
using namespace std;
int main()
{
// Enter your code here
return 0;
}C++ 标准模板库中的所有课
自己练习: C++ 在线编译器