C++STL——隊列
阿新 • • 發佈:2017-08-01
彈出 use 素數 是否 mes 包括 內部 頭文件 個數
queue<deque<int> > q2;
其成員函數有“判空(empty)” 、“尺寸(Size)” 、“首元(front)” 、“尾元(backt)” 、“加入隊列(push)” 、“彈出隊列(pop)”等操作。
訪問隊列中的元素個數,如例:q.size()
一、相關定義
原理: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? 1 myQ.size():10 0 myQ.size():9 1 myQ.size():8 2 myQ.size():7 3 myQ.size():6 4 請按任意鍵繼續. . .
C++STL——隊列