C STL容器介面卡 棧 佇列 優先順序佇列

2021-10-03 22:44:14 字數 2526 閱讀 7131

什麼是容器介面卡?

容器介面卡:介面卡底層沒有自己的資料結構,它是另外乙個容器的封裝,它的方法全部由底層依賴的容器進行實現的;它沒有實現自己的迭代器,不能使用迭代器遍歷。

來看這個例子:我們使用容器介面卡來實現乙個棧。

template>

class stack

void

pop(

) t top()

const

private:

container con;

};

實現成功,相當於棧將deque**了一下,也成為**模式。push將底層容器的push_back**了,pop將底層pop_back**了,棧的top將容器底層的back**了。

我們使用庫中的棧,需要加上標頭檔案

stack常用方法:

1.push();//入棧

2.pop();//出棧

3.top();//檢視棧頂元素

4.empty();//判斷棧空

5.size();//返回元素個數

簡單使用一下:

stack<

int> s1;

for(

int i=

0; i<20;

++i)

cout <<

"棧中元素個數:"

<

size()

<< endl;

while

(!s1.

empty()

)

我們使用庫中的佇列,需要加上標頭檔案stack常用方法:1.push();//入隊

2.pop();//出隊

3.front();//檢視隊頭元素

4.back();//產看隊尾元素

5.empty();//判空

6.size();//返回佇列元素個數

簡單使用一下:

queue<

int> que;

for(

int i=

0; i<20;

++i)

cout <<

"佇列中元素個數:"

<

size()

<< endl;

while

(!que.

empty()

)

優先順序佇列:底層資料結構為大根堆。我們使用庫中的優先順序佇列,需要加上標頭檔案優先順序佇列,誰優先順序大誰先出隊,誰優先順序小,誰後出隊。stack常用方法:1.push();//入優先順序佇列

2.pop();//出優先順序佇列

3.top();//檢視隊頂元素

4.empty();//判斷隊空

5.size();//返回元素個數

簡單使用一下:

priority_queue<

int> pque;

for(

int i=

0; i<20;

++i)

cout <<

"優先順序佇列中元素個數:"

<

size()

<< endl;

while

(!pque.

empty()

)

執行成功:資料從大到小依次出隊,資料越大優先順序越高。

問題一:stack與queue第二個模板型別引數依賴deque,為什麼不依賴vector?而優先順序佇列為什麼底層依賴vector?

1.vector的初始記憶體使用效率太低,沒有deque好。

2.對於queue來說,需要支援尾部插入,頭部刪除,時間複雜度需要為o(1),deque恰好符合條件,若用vector其底層效率太低。

3.vector需要大片的連續記憶體,而deque只需要分段的記憶體,當儲存大量資料時,顯然deuqe對於記憶體的利用率更高更好一些。

問題二:優先順序佇列為什麼底層依賴vector?

優先順序佇列底層預設把資料組成乙個大根堆結構,將大根堆結構看作一棵樹,如果將大根堆結構所有元素放入陣列中,使用下標計算其結點。若根節點為i,左孩子為2i+1,右孩子為2i+2;大根堆為堆頂,其元素最大,結點與左右孩子關係使用下標計算,就需要每乙個元素記憶體必須是連續的,因此底層依賴vector;而deque的第二維不是連續的,不能使用。

容器介面卡(棧容器介面卡 佇列容器介面卡)

我們已有的容器 比如vector list 這個容器支援的操作很多,比如插入,刪除,迭代器訪問等等。而我們希望這個容器表現出來的是棧的樣子 先進後出,入棧出棧等等,此時,我們沒有必要重新動手寫乙個新的資料結構,而是把原來的容器重新封裝一下,改變它的介面,就能把它當做棧使用了。c 定義了三種容器介面卡...

介面卡模式 實現優先順序佇列

介面卡模式 由於建立大堆和建立小堆方式相同,相似,所以可以通過新增乙個比較器 利用compare,定義偽函式less和greater 實現大小資料的比較,防止大量 重複。templatestruct less 小堆呼叫 templatestruct greater 大堆呼叫 templateclas...

C STL 容器介面卡

標準庫提供了三種順序容器介面卡 queue priority queue stack.介面卡是標準庫中通用的 概念,包括容器介面卡 迭代器介面卡和函式介面卡。本質上,介面卡是使一事物的行為類似於另一類事物的行為的一種機制。容器介面卡讓一種已 存在的容器型別採用另一種不同的抽象型別的工作方式實現。例如...