题目:询问学号(洛谷P3156)。有n(n<=2×10^6)名同学陆陆续续进入教师,已知每名同学的学号(1到10^9),按进教室的顺序给出。上课了,老师想知道第i个进入教师的同学的学号是什么
分析:可以直接建立一个可变长度数组来记录按顺序到达的同学的学号,之后直接在数组中查询即可。
#include <iostream>
#include <vector>
using namespace std;
int n, m, tmp;
int main() {
vector<int> stu;// 建立一个一维的可变数组
cin >> n >> m;
for (int i = 0; i < n; i++)
{
cin >> tmp;
stu.push_back(tmp); // 把学生按顺序加入到数组中
}
for (int i = 0; i < m; i++)
{
cin >> tmp; //注意最先进入教师的学生是stu[0]
cout << stu[tmp - 1] << endl; // 像数组一样查询
}
return 0;
}
STL可变数组vector
可变长度数组的头文件是<vector>,有以下常用方法
(1)vector<int>v(N,i):建立一个可变长度数组v,内部元素类型为int;
该可变数组最开始有N个元素,每个元素初始化为i。可以省略i(默认值为0),也可以把(N,i)同时省略,此时这个数组的长度就是0。内部元素类型可以换成其他的类型,如double。
(2)v.push_back(a):将元素a插入到数组v的末尾,并增加数组长度
(3)v.size():返回数组v的长度
(4)v.resize(n,m):重新调整数组大小为n,如果n比原来的小,则删除多余的信息;如果n比原来的大,则新增的部分都初始化为m,其中m是可以省略的。