---
# System prepended metadata

title: STL容器

---

#    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
第二種他會先比較第一個值，如果否定在比較另一個值
