C 學習筆記之 STL 佇列

2021-07-27 21:42:45 字數 2771 閱讀 4801

一.  引言

在演算法以及資料結構的實現中,很多地方我們都需要佇列(遵循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 7

using

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 查詢遍歷 ...