---
# System prepended metadata

title: STL 筆記
tags: [學習筆記, 演算法, 競程, C++]

---

**STL 筆記**
===

下一篇：
[初學BFS和DFS →](https://hackmd.io/tL06-QmKSweHuVJQ7yGLmA?both)



**Pair**
---
+ 宣告
+ 優先比較首個數字
```cpp=
pair<int, int> p1;         //宣告一個pair
pair<int, int> p2(1, 2);   //宣告一個元素(1, 2)的pair
```

**Tuple**
---



**Set**
---


**Map**
---

**Stack**
---
+ 先進後出(FILO, first in last out)
+ 標頭檔
```cpp=
#include <stack>             //引用標頭檔
```
+ 宣告
```cpp=
stack<int> s1;               //宣告一個stack
stack<pair<int, int>> s3;    //當然也可以塞其他資料型別
```
+ 加入元素
```cpp=
s.push(x);
```

+ 移除頂端元素
```cpp=
s.pop();
```

+ 其他好用的函式
```cpp=
s.empty();    //回傳stack是否為空
s.size();     //回傳stack大小
s.top();      //回傳stack頂端的元素
```



**Queue**
---
+ 先進先出(FIFO, first in first out))
+ 標頭檔
```cpp=
#include <queue>
```
+ 宣告
```cpp=
queue<int> q1;                //宣告一個queue
queue<pair<int, int>> q;      //當然也可以塞其他資料型別
```

+ 加入元素
```cpp=
q.push(x);
```

+ 移除頂端元素
```cpp=
q.pop();
```

+ 其他好用的函式
```cpp=
q.empty();    //回傳queue是否為空
q.size();     //回傳queue大小
q.front();    //回傳queue頂端的元素
q.back();     //回傳queue尾端的元素
```

### **Priority Queue**
+ 將資料由小排到大的Queue
+ 優先取出較大的資料
+ 宣告
```cpp=
priority_queue<int> pq;   //宣告一個priority queue
```
+ 其他的語法和一般的queue一樣(^^_^^)b
:::warning
如果想要優先取出較小的值，可以將值加上負號
:::


**Vector**
---

+ 動態陣列：可調整大小的陣列
+ 標頭檔
```cpp=
#include <vector>
```
+ 宣告
```cpp=
vector<int> v1;               //宣告一個vector
vector<int> v2[10];           //宣告十個vector
vector<queue<int>> v3;        //宣告一個裡面塞queue的vector
vector<int> v2(10, 0);        //宣告一個長度10，元素為0的vector
```

+ 加入元素
```cpp=
v.push_back(x);               //在vector的尾端添加元素x
v.emplace_back(x);            //在vector的尾端添加元素x(快)
v.insert(v.begin() + i, 5);   //在vector的i位置插入x
```

+ 移除元素
```cpp=
v.pop_back();   //在vector的尾端添加元素x
v.clear();      //清空整個vector
```

+ 其他好用的函式
```cpp=
v.empty();      //回傳vector是否為空
v.size();       //回傳vector大小
v.front();      //回傳vector頂端的元素
v.back();       //回傳vector尾端的元素
```
____
下一篇：
[初學BFS和DFS →](https://hackmd.io/tL06-QmKSweHuVJQ7yGLmA?both)
