1. stack
1.1 stack 的介紹
棧是一種容器適配器,專門設計用于LIFO環境(后進先出),其中元素僅從容器的一端插入和提取。
容器適配器,也就是使用特定容器類的封裝對象作為其底層容器,提供一組特定的成員函數來訪問其元素。
底層容器可以是任何標準容器類模板或一些其他專門設計的容器類。底層容器應該支持一下操作:
- empty
- size
- back
- push_back
- pop_back
一般都是用 vector 或 list 去適配,但是這兩個容器都是各有優劣,于是 C++ 把二者的優點合二為一設計出了 deque。
1.2 stack 的使用
1. push(const T& x)
將元素 x 壓入棧中。
2. pop()
把棧頂元素彈出。
3. size()
返回棧中元素個數。
4. top()
返回棧頂元素。
5. empty()
判斷棧是否為空。
#include<stack>
#include<iostream>using namespace std;int main()
{stack<int> st;for (int i = 0; i < 4; i++){st.push(i + 1);}cout << st.size() << endl;while (!st.empty()){cout << st.top() << ' ';st.pop();}cout << endl;return 0;
}
2. queue
2.1 queue 的介紹
隊列也是一種容器適配器,專門設計用于在FIFO(先進先出)中操作,其中元素插入容器的一端并從另一端提取。
2.2 queue 的使用
queue 的用法和 stack 的用法,大差不差。
1. push(const T& x)
將元素 x 入隊。
2. pop()
將隊頭元素出隊。
3. size()
返回隊列中元素個數。
4. back()
返回隊尾元素。
5. front()
返回對頭元素。
6. empty()
判斷隊列是否為空。
#include<queue>
#include<iostream>using namespace std;int main()
{queue<int> q;for (int i = 0; i < 4; i++){q.push(i + 1);}cout << q.size() << endl;cout << q.back() << endl;while (!q.empty()){cout << q.front() << ' ';q.pop();}cout << endl;return 0;
}
3. priority_queue
3.1?priority_queue 的介紹
優先級隊列也是一種容器適配器,它是由堆這種數據結構封裝的,是嚴格按照順序來存放數據的。
默認是大堆,可以用 greater 類去改變成小堆。
3.2?priority_queue 的使用
和棧幾乎沒有區別。
1. push(const T& x)
將元素 x 入堆
2. pop()
刪除堆中最小元素或最大元素(根據初始化時決定)。
3. size()
返回堆中元素個數。
4. top()
返回堆中最小元素或最大元素(根據初始化時決定)。
5. empty()
判斷堆是否為空。
#include<queue>
#include<deque>
#include<iostream>using namespace std;int main()
{priority_queue<int> pq1;for (int i = 0; i < 4; i++){pq1.push(i + 1);}cout << pq1.size() << endl;while (!pq1.empty()){cout << pq1.top() << ' ';pq1.pop();}cout << endl;priority_queue<int, vector<int>, greater<int>> pq2;// 這里可以用 vector/deque 都可以for (int i = 0; i < 4; i++){pq2.push(i + 1);}cout << pq2.size() << endl;while (!pq2.empty()){cout << pq2.top() << ' ';pq2.pop();}cout << endl;return 0;
}