(我的STL相關的博客目錄:https://blog.csdn.net/Kprogram/article/details/90408011)
(queue-c++官網:http://www.cplusplus.com/reference/queue/)
queue 是數據結構 “隊列”s,擁有元素先進先出的特性。如果用數組來作爲隊列,長度是有限的,而且需要儲存隊列首尾的指針,不同於棧,隊列還要考率元素出隊列之後,留下的空擋該怎麼處理。stl提供了一個不定長容器queue來作爲隊列,queue表留有有隊列操作的各種成員函數,方便實用。
0 - 頭文件:queue 命名空間:std
#include <queue>
using namespace std;
1 - 構建一個queue:queue<typename> name
typename指的是隊列內數據類型,可以是 int, double, 可以是struct, class, 也可以是 queue, string等等。總之是一個數據對象都行。
name 是你構建的隊列的名字,符合變量命名法則就行。
例:構建一個 int 類型的隊列, 名字叫做 Q。
queue<int> Q;
2 - 使用queue:常用成員函數 ( 假設你創建的queue對象名字叫 Q )
(粉紅色的函數爲常用函數!大部分情況下這些函數就夠用了)
無參函數:
empty():如果queue爲空,返回True, 反之則返回 False。
fornt():返回隊列第一個元素。
back():返回隊列最後一個元素。
pop():刪除隊列第一個元素,並不返回元素(一般與front()配合使用:先返front(),再pop(),相當於出隊列操作)。
size():返回queue內數據的個數(相當於數組長度)。
#一般用法:(假如是一個int類型的隊列)
while(!Q.empty()) {//當隊列不爲空
int I = Q.front(); Q.pop();//元素出隊列
...//對I的某些操作
有參函數:
push(type):把一個數據(type)壓入棧頂(相當於入棧)。
因爲對於隊列,push等同於push_back,所以queue 沒有push_back成員函數!(已經試過了會報錯)
swap(Q1):交換Q 和 Q1 中的內容(Q1是另一個swap對象)。
//假設隊列內的數據類型是data
class data {
int a;
int b;
public:
data(int x, int y):a(x), b(y) {}
};
//push:
data d(1,2);
Q.push(d);
//或者
Q.push(data(1,2));
push的優化:emplace函數(點擊藍色字體>emplace<)