1. 程式人生 > >C++STL——隊列

C++STL——隊列

彈出 use 素數 是否 mes 包括 內部 頭文件 個數

一、相關定義

原理: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——隊列