# C++ STL
## stack
```cpp
#include <stack>
stack <int> s; //宣告一個名為 s 的 stack (int 型態)
s.push(123); //將 123 推入 s
while (!s.empty()) { //如果 s 不是空的->執行 while
cout << s.size() << endl; //輸出 s 的長度 (元素的數目)
cout << s.top() << endl; //輸出 s 頂端的元素
s.pop(); //移除 s 頂端的元素
}
```
output
```
1
123
```
## queue
```cpp
#include <queue>
queue <int> q; //宣告一個名為 q 的 queue (int 型態)
priority_queue <int> q1; //q1 中所有值會自動由大到小排序
priority_queue <int, vector<int>, less<int> > q2; //意義同 q1
priority_queue <int, vector<int>, greater<int> > q3; //由小到大排序
q.push(123); //將 123 推入 q
q.push(456); //將 456 推入 q
while (!q.empty()) { //如果 q 不是空的->執行 while
cout << q.size() << endl; //輸出 q 的長度 (元素的數目)
cout << q.front() << endl;//輸出 q 第一個元素
cout << q.back() << endl; //輸出 q 最後一個個元素
q.pop(); //移除 q 的第一個元素
}
```
output
```
2
123
456
1
456
456
```
## deque (double ended queue)
```cpp
#include <deque>
deque <int> d; //宣告一個名為 d 的 deque (int 型態)
d.push_back(123); //將 123 從尾端推入 d
cout << d.front() << endl;//輸出 d 第一個元素
d.pop_back(); //移除 d 尾端的第一個元素
d.push_front(456); //將 456 從前推入 d
d.pop_front(); //移除 d 的第一個元素
d.insert(d.begin(), 789); //在 d 開始的記憶體位置插入 789
d.insert(d.begin(), 101112);
d.erase(d.end()-1); //移除在 d 尾端記憶體位置的值
cout << d.size() << endl; //輸出 d 的長度 (元素的數目)
cout << d.back() << endl; //輸出 d 最後一個個元素
d.clear(); //清空 d 內所有元素
```
output
```
123
1
101112
```
## vector
```cpp
#include <vector>
vector <int> v; //宣告一個名為 v 的 vector (int 型態)
v.push_back(123); //將 123 從尾端推入 v
v.insert(v.begin(), 789); //在 v 開始的記憶體位置插入 789
cout << v.front() << endl;//輸出 v 第一個元素
cout << v.back() << endl;//輸出 v 最後一個元素
v.erase(v.end()-1); //移除在 v 尾端記憶體位置的值 (會回傳一個迭代器指向刪除元素的下一個元素)
v.pop_back(); //移除 v 尾端的第一個元素
cout << v.size() << endl; //輸出 v 的長度 (元素的數目)
v.clear(); //清空 c 內所有元素
}
```
output
```
789
123
0
```
## map
```cpp
#include <map>
map<char,int> mmap; //宣告一個叫 mmap 的 map
map<char,int>::iterator it; //宣告一個 map 的迭代器
mmap.insert(pair<char,int>('a',97)); //在 map 中存入 97, key 為 'a'
mmap['b'] = 98; //在 map 中存入 98, key 為 'b'
mmap['c'] = 99;
mmap['d'] = 100;
for (it = mmap.begin(); it != mmap.end(); it++) { //執行 mmap 中的每一個元素
cout << it->first << " => "; //輸出目前 it 指向的 mmap 元素的 key
cout << it->second << endl; //輸出目前 it 指向的 mmap 元素的 value
}
if (mmap.count('c')) //有 key 為 'c' 的元素回傳 1 ; 無則回傳 0
cout << "map 中有 key 為 c 的元素" << endl;
it = mmap.find('c'); //it 指向 mmap 中 key 為 'c' 的元素
mmap.erase(it); //刪除 it 指向的 mmap 中的元素
if (mmap.count('c')) //有 key 為 'c' 的元素回傳 1 ; 無則回傳 0
cout << "map 中有 key 為 c 的元素" << endl;
for (it = mmap.begin(); it != mmap.end(); it++)
cout << it->first << " => " << it->second << endl;
```
output
```
a => 97
b => 98
c => 99
d => 100
map 中有 key 為 c 的元素
a => 97
b => 98
d => 100
```