第19章 queue佇列容器
第19章 queue佇列容器
queue佇列也是一個線性儲存表,與後進先出的堆疊不同,元素資料的插入在表的一段進行,在另一段刪除,從而構成了一個先進先出FIFO(First In First Out)表。插入一段稱為隊尾,刪除一段稱為隊尾。
由於C++ STL的佇列泛化,預設使用雙端佇列deque來實現,因此,queue也可以看成一個容器介面卡,將deque容器轉換為queue容器。當然,也可以利用其他合適的序列容器作為底層實現queue容器。
19.1queue技術原理
←出列 | a0 | a1 | … | an-1 | an | 入列← | |
---|---|---|---|---|---|---|---|
隊首 | 隊尾 |
SGI C++ STL對queue佇列的泛化,是通過模板型別,將預設的deque雙端佇列型別匯入,在內部建立一個序列容器物件,來處理queue佇列的資料儲存和操作,包括queue佇列是否為空,取隊首元素,取隊尾元素,元素入隊和元素出隊等。
(1)預設建構函式建立queue物件
``queue q;`
(2)複製建構函式queue(const queue&)
複製建構函式,用一個queue物件建立新的queue物件,
queue<int,int <list> > q1;
queue<int, int <list>> q2(q1);
【獲取queue佇列的所有元素】
#include<queue> #include<iostream> using namespace std; int main(){ queue<int> q; q.push(3); q.push(19); q.push(29); q.push(26); q.push(33); //元素出隊 while (!q.empty()) { cout << q.front() << endl; //列印隊首元素 q.pop(); //刪除隊首元素 } system("pause"); return 0; }
元素入隊
queue佇列容器的元素入隊函式也是push函式。由於C++STL的queue佇列不預設固定的佇列大小,因此push函式也就不判斷佇列空間是否已為滿,都會試圖將元素放入佇列,因此push函式不反返回元素入隊是否成功的訊息
``void push(const value_type& x)`
元素入隊,將元素x放入queue佇列,稱為新的隊尾元素
元素出隊
queue佇列容器的元素出隊函式為pop函式。函式不判斷佇列是否已為空,都試圖將隊首元素刪除掉。一般先判斷佇列不為空,才使用該函式進行元素出隊操作。如下是pop函式的使用原型。
void pop()
下面的示例程式碼將queue佇列的所有元素全部出隊,直到佇列沒有任何元素
//queue<int> q;
while(!q.empty()) {
q.pop(); //元素出隊(刪除隊首元素)
}