Menu
CoddyTech

向量

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()在指定位置插入指定元素
challenge icon

挑战

简单

从输入中输入正数,直到输入 -1。之后,最后输入的自然数 N 就是你的上下文数。输出所有能够整除 N 且没有余数的元素。

例如:

 

Input
5
10
15
-1
100
Output
5
10

因为 100 能被 5 和 10 整除,但不能被 15 整除。

 

Input
2
4
6
8
-1
12
Output
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++ 在线编译器