STL容器介面卡

2021-06-21 11:22:27 字數 3016 閱讀 9218

stl學習系列之六—容器介面卡

stl提供了三種容器介面卡:stack,queue,priority_queue。

介面卡並不是第一類容器,因為它們並沒有提供與元素的儲存形式有關的真正資料結構實現,並且介面卡不支援迭代器。

介面卡的優點是:能夠使程式設計師選擇一種合適的底層資料結構。

這三個介面卡類都提供了成員函式push和pop,能夠在每個介面卡資料結構中正確地插入和刪除元素。

1、 stack介面卡

stack類允許在底層資料結構的一端執行插入和刪除操作(先入後出)。堆疊能夠用任何序列容器實現:vector、list、deque。

下面的demo1建立了三個整數堆疊,使用標準庫的每種序列容器作為底層資料結構來實現堆疊。預設情況下,堆疊是用deque實現的。

堆疊的操作包括:

1.將乙個元素插入到堆疊頂部的push函式(通過呼叫底層容器的push_back函式實現)

2.從堆疊的頂部刪除乙個元素的pop函式(通過呼叫底層元素的pop_back函式實現)

3.獲取堆疊頂部元素引用的top函式(通過呼叫底層容器的back函式實現)

4.判斷堆疊是否為空的empty函式(通過呼叫底層容器的empty函式實現)

5.獲取堆疊元素數量的size函式(通過呼叫底層容器的size函式實現)

為了獲得最佳效能,應使用vector類作為stack的底層容器

下面的demo演示了stack介面卡類

[cpp]view plain

copy

#include 

#include 

#include 

#include 

using

namespace

std;  

template

<

typename

t> 

void

pushelements(t &stackref);  

template

<

typename

t> 

void

popelement(t &stackref);  

int_tmain(

intargc, _tchar* argv)    

輸出結果為:

2、 queue介面卡

queue類允許在底層資料結構的末尾插入元素,也允許從前面插入元素(先入先出)。

佇列能夠用stl資料結構的list和deque實現,預設情況下是用deque實現的。

常見的queue操作:

1.在佇列末尾插入元素的push函式(通過呼叫底層容器的push_back函式實現)

2.在佇列前面刪除元素的pop函式(通過呼叫底層容器的pop_back函式實現)

3.獲取佇列中第乙個元素的引用的front函式(通過呼叫底層容器的front函式實現)

4.獲取佇列最後乙個元素的引用的back(通過呼叫底層容器的back函式實現)

5.判斷佇列是否為空的empty函式(通過呼叫底層容器的empty函式實現)

6.獲取佇列元素數量的size函式(通過呼叫底層容器的size函式實現)

為了獲得最佳效能,應使用deque類作為queue的底層容器

下面的denon2演示了queue介面卡類

[cpp]view plain

copy

#include 

#include 

using

namespace

std;  

int_tmain(

intargc, _tchar* argv)  

cout

);  

return

0;  

}  

輸出結果為:

3、 priority_queue介面卡

priority_queue類,能夠按照有序的方式在底層資料結構中執行插入操作,也能從底層資料結構的前面執行刪除操作。

priority_queue能夠用stl的序列容器vector和deque實現。預設情況下使用vector作為底層容器的。當元素新增到priority_queue時,它們按優先順序順序插入。

這樣,具有最高優先順序的元素,就是從priority_queue中首先被刪除的元素。通常這是利用堆排序來實現的。

堆排序總是將最大值(即優先順序最高的元素)放在資料結構的前面。這種資料結構稱為(heap)

預設情況下,元素的比較是通過比較器函式物件less執行的。

priority_queue具有幾個常見的操作:

1.根據priority_queue的優先順序順序在適當位置插入push函式(通過呼叫底層容器的push_back,然後使用堆排序為元素重新排序)

2.刪除priority_queue的最高優先順序元素的pop(刪除堆頂元素之後通過呼叫底層容器的pop_back實現)

3.獲取priority_queue的頂部元素引用的top函式(通過呼叫底層容器的front函式實現)

4.判斷priority_queue是否為空的empty函式(通過呼叫底層容器的empty函式實現)

5.獲取priority_queue元素數量的size函式(通過呼叫底層容器的size函式實現)

為了獲取最佳效能,使用vector作為priority_queue的底層容器

下面demo3演示了priority_queue介面卡類的用法

[cpp]view plain

copy

#include 

#include 

using

namespace

std;  

int_tmain(

intargc, _tchar* argv)  

cout

);  

return

0;  

}  

輸出結果為:

STL 容器介面卡

那麼c 中的容器介面卡是幹什麼的呢?可以做乙個模擬,我們已有的容器 比如vector list deque 就是裝置,這個裝置支援的操作很多,比如插入,刪除,迭代器訪問等等。而我們希望這個容器表現出來的是棧的樣子 先進後出,入棧出棧等等,此時,我們沒有必要重新動手寫乙個新的資料結構,而是把原來的容器...

STL容器介面卡

首先,我們要明白介面卡是幹什麼的?其實就是乙個介面轉換裝置,是得我們能用特定的方法去操作一些我們本來無法操作的東西。舉乙個例子,比如你的乙個裝置支援串列埠線,而你的電腦支援的是usb口,這時候,我們沒有必要重新買乙個支援usb的裝置,只需要一根串列埠轉usb口的小玩意,讓你的裝置能夠連線到usb插口...

stl 容器介面卡

介面卡是一種設計模式,將乙個類的介面轉換為另外乙個類介面。在 stl 中,常見的容器介面卡有 stack queue 和 priority queue。容器介面卡就是將特定容器類封裝作為其底層容器類。在標準 stl 中,stack和queue預設底層容器都是deque。其實作為容器介面卡,底層可以是...