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; 

其他的操作同上

posted @ 2020-11-22 19:34  summitsoul  阅读(171)  评论(0编辑  收藏  举报