1、相關定義ios
原理:queue 隊列也是一個線性存儲表,元素數據的插入在表的一端進行,在另外一端刪除,從而構成了一個先進先出FIFO(First In First Out)表。函數
隊頭&隊尾:插入一端稱爲隊尾,刪除一端稱爲隊首。spa
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)」等操做。blog
C++ STL對queue隊列的泛化,是經過模板類型,將默認的deque雙端隊列類型導入,在內部建立一個序列容器對象,來處理 queue隊列的數據存儲和操做,包括queue隊列是否爲空、取隊首元素、取隊尾元素、元素入隊和元素出隊等。因爲僅須要取隊首和隊尾元素的操做,所以queue隊列容器並不提供任何類型的迭代器。隊列
2、queue模板類io
定義queue 對象的示例代碼以下:
queue<int> q1;
queue<double> q2;模板
queue 的基本操做有:
入隊,如例:q.push(x); 將x 接到隊列的末端。
出隊,如例:q.pop(); 彈出隊列的第一個元素,注意,並不會返回被彈出元素的值。
訪問隊首元素,如例:q.front(),即最先被壓入隊列的元素。
訪問隊尾元素,如例:q.back(),即最後被壓入隊列的元素。
判斷隊列空,如例:q.empty(),當隊列空時,返回true。
訪問隊列中的元素個數,如例:q.size()class
3、代碼實現容器
#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 請按任意鍵繼續. . .