购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.4.1 vector

vector(向量)是一个封装了动态大小数组的顺序容器(Sequence Container)。顺序容器中的元素按照严格的线性顺序排序,可以通过元素在序列中的位置访问对应的元素,支持数组表示法和随机访问。vector使用一个内存分配器动态处理存储需求。使用vector时需要引入头文件#include<vector>。

(1)创建。vector能够存放各种类型的对象,可以是C++标准数据类型,也可以是结构体类型。例如:

创建二维数组:

(2)增加。向vector中添加元素,可以从尾部添加,也可以从中间添加。需要注意的是,从中间插入时需要将插入位置之后的所有元素后移,时间复杂度为 O ( n ),效率较低。

(3)删除。可以删除尾部元素、指定位置的元素、区间,还可以清空整个向量。

(4)遍历。可以用数组表示法,也可以用迭代器对向量元素进行访问。

(5)改变向量的大小。resize可以改变当前向量的大小,如果它比当前向量大,则填充默认值;如果比当前向量小,则舍弃后面的部分。

训练 间谍

题目描述(HDU3527): X国的情报委员收到一份可靠的信息,信息表明Y国将派间谍去窃取X国的机密文件。X国指挥官手中有两份名单列表,一份是Y国派往X国的间谍名单列表,另一份是X国以前派往Y国的间谍名单列表。这两份名单列表可能有些重叠。因为间谍可能同时扮演两个角色,称之为“双重间谍”。因此,Y国可以把双重间谍送回X国。很明显,这对X国是有利的,因为双重间谍可以把Y国的机密文件带回,而不必担心被Y国边境拘留。所以指挥官决定抓住由Y国派出的间谍,让普通人和双重间谍进入。那么你能确定指挥官需要抓捕的间谍名单吗?

输入: 有几个测试用例。每个测试用例都包含4部分。第1部分包含3个正整数 A B C A 是进入边境的人数, B 是Y国将派出的间谍人数, C 是X国以前派到Y国的间谍人数。第2部分包含 A 个字符串,为进入边境的人员名单。第3部分包含 B 个字符串,为由Y国派出的间谍名单。第4部分包含 C 个字符串,即双重间谍的名单。每个测试用例后都有一个空白行。在一份名单列表中不会有任何名字重复,如果有重复的名字出现在两份名单列表中,则表示同一个人。

输出: 输出指挥官抓捕的间谍名单(按列表 B 的出现顺序)。如果不应捕获任何人,则输出“No enemy spy”。

1. 算法设计

本题有3个名单,可以使用数组vector解决。

(1)定义4个vector,分别记录3行字符串和答案。

(2)判断第2行在第1行中出现但没在第3行中出现的字符串,将其添加到答案中。

(3)如果答案数组不空,则按顺序输出。 LRX7r/oMAI2HN4cARiiWEDHrMXjuvM9YmgoSShlBJjqkpjUFKV30qUCGE98FjKyh

2. 算法实现
点击中间区域
呼出菜单
上一章
目录
下一章
×