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。其實作為容器介面卡,底層可以是...