# 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 ```