OI選手STL常用備註
阿新 • • 發佈:2020-11-22
本篇只是一個作為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;
其他的操作同上