**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)