OI选手STL常用备注
本篇只是一个作为OI选手经常使用的\(STL\)模板中的集合,随时保持更新。
\(1、vector\)
它是一个向量类型的容器,可以容纳很多类型的数据,称为容器。
所需头文件
#include<vector>
初始化
vector<int> v; //一维
vector<int> v[N]; //二维
vector<string int> v[N]; //不同的二维表达形式
操作
返回v的第一个元素
v.front();
清空v
v.clear();
判断是否为空, 空返回\(flase\), 不空返回\(true\)
v.empty();
在末尾插入一个元素\(x\)
v.push_back(x);
删除\(v\)的最后一个元素
v.pop_back();
删除\(v\)中的第\(n\)个到第\(m\)个元素
v.erase(v.begin() + n, v.begin() + m);
在\(v\)的第\(n\)个元素位置插入数值\(x\)
v.insert(v.begin() + n, x);
在\(v\)的第\(n\)个蒜素位置插入\(x\)个数值为\(y\)的数
v.insert(v.begin() + n, x, y);
返回\(v\)中元素的个数
v.size();
循环添加元素
for(int i = 1; i <= n; i++)
v.push_back(i);
\(2、queue\)
\(queue\)为队列,它的模板类需要两个模板参数,一个是元素类型,另一个是容器类型,我们可以根据自己的需要来改变容器类型。它是先进先出的。
所需头文件
#include<queue>
初始化
queue<int> q;
操作
返回\(q\)中元素的个数
q.size();
向\(q\)的尾部添加一个元素\(x\)
q.push(x);
返回\(q\)中最后一个元素
q.back();
返回\(q\)中第一个元素
q.front();
判断\(q\)是否为空, 空返回\(flase\), 不空返回\(true\)
q.empty();
删除\(q\)中的第一个元素
q.pop();
在比赛中,我们经常用\(queue\)实现另一种叫做优先队列的数据结构,它的好处是可以按照要求自动按照从大到小或从小到大排序。
priority_queue<Type, Container, Functional>
\(Type\) 就是数据类型,\(Container\) 就是容器类型(\(Container\)必须是用数组实现的容器,比如\(vector\),\(deque\)等等,但不能用 \(list\)。\(STL\)里面默认用的是\(vector\)),\(Functional\) 就是比较的方式,当需要用自定义的数据类型时才需要传入这三个参数,使用基本数据类型时,只需要传入数据类型,默认是大顶堆
一般我们是这样使用的。
//升序队列
priority_queue <int,vector<int>,greater<int> > q;
//降序队列
priority_queue <int,vector<int>,less<int> >q;
//如果只想要升序的话这样默认的即可
priority_queue<int> a;
其他的操作同上
I'm noting without you.