# STL容器
以下只列出常用的容器,且皆需輸入對應函式庫,打出#include <對應名稱> 。
```cpp
#include <stack>
```
建立容器方法都是打出對應名稱<容器資料類型> 容器名稱。
```cpp
stack<int> stack_a;
```
## stack
中文名稱是**堆疊**,就是將資料從上到下一個個放入,也只能從上面一個個取走。
舉例:把盤子疊起來後,只能從最上方拿走盤子,不然會破掉。
| 程式碼 | 功能 |
| -------- | -------- |
| push(資料) | 放入資料 |
| top() | 讀取最上方的資料 |
| pop() | 刪除最上方的資料 |
| empty() | 判斷容器是否是空的,空的回傳1,有內容回傳0 |
| size() | 回傳容器資料數 |
## queue
中文名稱是**佇列**,就是將資料從上方一個個放入,取出時只能從下方一個個取走。
舉例:排隊時只能從後方排堆,最先排的最先走,不能插隊。
| 程式碼 | 功能 |
| -------- | -------- |
| push(資料) | 放入資料 |
| top() | 讀取最上方的資料 |
| pop() | 刪除最上方的資料 |
| empty() | 判斷容器是否是空的,空的回傳1,有內容回傳0 |
| size() | 回傳容器資料數 |
::: success
用法跟stack一樣
:::
## vector
用法幾乎跟陣列一樣,當無法在建立陣列時決定陣列大小即可使用
| 程式碼 | 功能 |
| -------- | -------- |
| push_back(資料) | 放入資料在最後面 |
|size()|回傳容器資料數|
## set
set是一種集合,不會有重複資料,且set內容不可被修改,只能新增或刪除資料。set會自動排序容器內資料,不能修改或指定資料位置,但是不代表資料沒有順序。
可以在新增容器時就添加資料
```cpp
set<int> set_a{1,2,3,4,5};
```
| 程式碼 | 功能 |
| -------- | -------- |
|insert(資料)|新增資料|
|erase(資料)|移除資料|
|begin()|回傳set一開始的迭代器(iterator)|
|end()|回傳set尾部的迭代器|
|a.find(資料)|尋找資料,並回傳該資料的迭代器,若不存在則回傳end
# 其他容器
輸入utility函式,內部有名為pair的容器
## pair
此類型容器能一次包含兩個變數,建立方式(無預設值)是pair <變數類型, 變數類型> 名稱,例如
```cpp
pair <int, string> p;
```
如需預設值在名稱後加括弧即可
```cpp
pair <int, string> p(90, name);
```
常見的用法也可以建立陣列類型的pair
```cpp
pair <int, int> p[5];
```
需要取值的話直接.first或.second即可
若要比較pair,則有兩種狀況
1. ==和!=
2. >, <, >=, <=
第一種他會同時比較first和second兩個值,同時達成回傳true,否則回傳false
第二種他會先比較第一個值,如果否定在比較另一個值