標籤:儲存 實現 main 包括 類型 使用 資料 尺寸 include
一、相關定義
原理: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> int main(){queue<int> q; q.push(4); q.push(5); printf("%d\n",q.front()); q.pop();}
#include <iostream>#include <queue>#include <assert.h>/*調用的時候要有標頭檔: #include<stdlib.h> 或 #include<cstdlib> +#include<queue> #include<queue>詳細用法:定義一個queue的變數 queue<Type> M查看是否為空白範例 M.empty() 是的話返回1,不是返回0;從已有元素後面增加元素 M.push()輸出現有元素的個數 M.size()顯示第一個元素 M.front()顯示最後一個元素 M.back()清除第一個元素 M.pop()*/using namespace std;int _tmain(int argc, _TCHAR* argv[]){queue <int> myQ;cout<< "現在 queue 是否 empty? "<< myQ.empty() << endl; for(int i =0; i<10 ; i++){myQ.push(i);}for(int i=0; i<myQ.size(); i++){printf("myQ.size():%d\n",myQ.size());cout << myQ.front()<<endl;myQ.pop();}system("PAUSE"); return 0;}輸出結果:現在 queue 是否 empty? 1myQ.size():100myQ.size():91myQ.size():82myQ.size():73myQ.size():64請按任意鍵繼續. . .
C++STL——隊列