一、相關定義
原理:queue 佇列也是一個線性儲存表,元素資料的插入在表的一端進行,在另一端刪除,從而構成了一個先進先出FIFO(First In First Out)表。
隊頭&隊尾:插入一端稱為隊尾,刪除一端稱為隊首。
C++佇列是一種容器介面卡,預設使用雙端佇列deque來實現,將 deque 容器轉換為 queue 容器。當然,也可以利用其他合適的序列容器作為底層實現queue容器。
佇列可以用線性表(list)或雙向佇列(deque)來實現(注意vector container不能用來實現queue,因為vector 沒有成員函式pop_front!):
queue<list<int> > q1;
queue<deque<int> > q2;
其成員函式有“判空(empty)” 、“尺寸(Size)” 、“首元(front)” 、“尾元(backt)” 、“加入佇列(push)” 、“彈出佇列(pop)”等操作。
C++ STL對queue佇列的泛化,是透過模板型別,將預設的deque雙端佇列型別匯入,在內部建立一個序列容器物件,來處理 queue佇列的資料儲存和操作,包括queue佇列是否為空、取隊首元素、取隊尾元素、元素入隊和元素出隊等。由於僅需要取隊首和隊尾元素的操作,因此queue佇列容器並不提供任何型別的迭代器。
二、queue模板類
queue模板類的定義在 <queue>標頭檔案中。
queue 模板類也需要兩個模板引數,一個是元素型別,一個容器型別,元素型別是必要的,容器型別是可選的,預設為deque 型別。
定義queue 物件的示例程式碼如下:
queue<int> q1;
queue<double> q2;
queue 的基本操作有:
- 入隊,如例:q.push(x); 將x 接到佇列的末端。
- 出隊,如例:q.pop(); 彈出佇列的第一個元素,注意,並不會返回被彈出元素的值。
- 訪問隊首元素,如例:q.front(),即最早被壓入佇列的元素。
- 訪問隊尾元素,如例:q.back(),即最後被壓入佇列的元素。
- 判斷佇列空,如例:q.empty(),當佇列空時,返回true。
- 訪問佇列中的元素個數,如例:q.size()
三、程式碼示例
#include <queue>
#include <iostream>
int main(){
queue<int> q;
q.push(4);
q.push(5);
printf("%d\n",q.front());
q.pop();
}