1. 程式人生 > 實用技巧 >OI選手STL常用備註

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; 

其他的操作同上