一. 引言
在演算法以及資料結構的實現中,很多地方我們都需要佇列(遵循fifo,先進先出原則)。
為了使用佇列,我們可以自己用陣列來實現佇列,但自己寫太麻煩不說,並且還很容易出錯。
好在c++的stl(標準模板庫)為我們實現了乙個強大的佇列,它包含在標頭檔案中。
二. queue
a) 建構函式
下面用例子來展示queue的建構函式
deque deck(3,100); list
mylist(2,100
); queue
first;//
預設構造
queue
> second(mylist);//
以list為容器構造
queue
third(mylist);//
以deque為容器構造,其中deque是queue的預設容器
queue
> forth(mylist);//
用預設容器構造,deque是queue的預設容器
我們可以使用deque(雙端佇列容器)或者list(鍊錶容器)來作為queue的基礎容器(underlying container,即佇列是在基礎容器的基礎上實現的),其中deque是預設使用的,如果沒有在引數中特殊指定,那麼queue就使用deque作為基礎容器。
b) 其他成員函式
empty 測試容器是否為空,為空時返回true
size 返回容器的大小
front 返回佇列的第乙個元素,即最早被壓進佇列的元素
back 返回佇列的最後乙個元素,即最晚被壓進佇列的元素
push 把元素新增至佇列尾
pop 彈出佇列首元素
swap(c++11) 交換兩個佇列
emplace(c++11) 在容器中直接構造元素,可以參考c++11新特性emplace操作
三. priority_queue(優先佇列)
a) 建構函式
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7using
namespace
std;
8struct
node
11};
12struct
mycomparision
17bool
operator () (const
int & lhs, const
int &rhs) const
21};
22struct
cmp26
};27
intmain();
29 priority_queuezero;
30 priority_queue,cmp> first;//
自定義結構體的優先佇列,降序輸出
31for(int
c : myints)
34 priority_queue,mycomparision> second(myints,myints+4,mycomparision(true));//
與自定義的仿函式mycomparision結合實現自定義排序功能
35 priority_queue,mycomparision> third(myints,myints+4
,mycomparision());
36 priority_queue,mycomparision> forth(myints,myints+4);//
輸出結果同third
37 priority_queue,less> fifth(myints,myints+4);//
結果同third,less使佇列優先輸出小數,此為預設,即less可以省略
38 priority_queue,greater> sixth(myints,myints+4);//
使用functional庫中的仿函式greater使佇列優先輸出小數
39while(!first.empty())
43 cout <44while(!second.empty())
48 cout <49while(!third.empty())
53 cout <54while(!forth.empty())
58 cout <59while(!fifth.empty())
63 cout <64while(!sixth.empty())
68return0;
69 }
優先佇列內部維持了堆。利用堆來實現隨機的
我們可以使用deque(雙端佇列容器)或者vector(向量容器)來作為priority_queue的基礎容器,其中vector是預設使用的,如果沒有在引數中特殊指定,那麼queue就使用vector作為基礎容器。
這裡還要特別注意仿函式的使用。在標頭檔案提供了一部分仿函式,我們可以利用這些仿函式來實現對基本資料型別的公升序降序操作。但對於自定義的結構體型別,我們需要自己額外來實現仿函式來進行排序。有關仿函式的概念可以參考部落格:【c++ stl】深入解析神秘的 --- 仿函式
b) 其他成員函式
priority_queue的成員函式與queue大體一致,其中需要注意的是:
top取代了原來的front,每次取特定排序規則中的具有最值的元素
取消了back函式
以上是我自己查資料總結的佇列的一些用法,如有不對之處還望各位斧正。
STL學習筆記之佇列queue
只能訪問queue容器介面卡的第乙個和最後乙個元素。只能在容器的末尾新增新元素,只能從頭部移除元素。fifo 先進先出 1.初始化 需要標頭檔案 queueque 2.成員函式 c 佇列queue類成員函式如下 back 返回最後乙個元素 empty 如果佇列空則返回真 front 返回第乙個元素 ...
C 學習筆記之 STL 庫 queue
queue 佇列是一種容器介面卡,專門用來滿足先進先出的操作,也就是元素在容器的一端插入並從另一端提取。優先順序佇列是一種容器介面卡,根據一些嚴格的弱排序標準,專門設計使其第乙個元素始終是它包含的最值元素。其本質上就是乙個大頂堆或者小頂堆,會在需要時自動呼叫函式 make heap,push hea...
C 基礎 STL之佇列queue
這篇文章介紹一下stl中佇列queue的基本使用方法。佇列也是最為常見的一種資料結構,佇列中的元素滿足fifo 先進先出 主要特點如下 include using namespace std queue函式名 用途功能說明 時間複雜度 size 查詢遍歷 獲取元素個數 o 1 front 查詢遍歷 ...