1. 程式人生 > >第19章 queue佇列容器

第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(); //元素出隊(刪除隊首元素)

}