STL之容器介面卡stack的實現框架

2021-09-07 10:35:10 字數 2593 閱讀 5423

一提到介面卡(adapter)。我們就想到了早期用**線上網所用的數據機,俗稱「貓」。「貓」的作用是實現數模轉化和模數轉化,在client,它能夠將**的模擬資訊轉化為我們計算機能夠接收的數字資訊,所以貓相當於乙個轉換器。再舉個更加好理解的樣例來說明"介面卡「的含義。相信在我們每乙個人的家裡都有插排,如果就這麼一種情況。如今我們家裡的牆壁上僅僅有乙個三角的插口,而我們的電視卻是兩個口,怎麼辦?毫無疑問。我們能夠接乙個新的插排,該插排至少有兩個孔,乙個是用於連線牆壁上的三角的插口,乙個則是提供給電視劇集用的兩口的插口。這樣,我們就能夠將新增加的中間用於轉換的插排是乙個介面卡。

從上面的樣例我們可以非常easy的得出:介面卡可以對原始事物進行一次封裝與修飾。並提供第二種介面。該介面可以更好地滿足使用者的需求。具有一定的專用性

這樣。我們就行介紹下stack這一容器介面卡了。

之前我們已經介紹過三種主要的順序容器,各自是vector、list和deque,這三種順序容器的設計都會設計到迭代器的概念。stl要求不論什麼一種容器都必須內建乙個迭代器,假設連迭代器都沒有內建,就談不上」容器「的定義了。所以。stack僅僅是乙個容器介面卡,並非乙個容器,由於stack不提供迭代器,所以在元素不彈出的前提下不可以遍歷內部全部的元素

學習過」資料結構「的人都知道棧,棧是一種後進先出或者說先進後出的資料結構,乙個棧的插入和刪除操和取值都僅僅能在棧頂進行。依據棧的性質,棧頂元素必定是最後乙個進入的元素。依據這點,我們可以非常easy地得出乙個結論:不論什麼提供末端插入(push_back函式)、刪除(pop_back函式)、訪問(back函式)都可以被stack容器封裝與修飾。這裡的封裝指的是通過stack物件,你不能直接訪問被封裝的底層容器了,所謂的修飾指的是stack在對底層容器做封裝的同一時候。還提供了必要的介面。以滿足使用者的須要。

我們將被介面卡封裝的底層容器稱為基礎容器。

在我們所學過的順序容器中,僅僅要能夠提供末端的插入、刪除和訪問操作。都能夠作為stack介面卡的基礎容器。所以vector、list和deque都能夠作為stack的基礎容器,而stack預設的基礎容器為deque容器

對於乙個stack,我們通常須要提供這幾個介面函式:

(1)獲取棧內當前元素的個數:size_type size();

(2)取棧頂元素(但並不彈出):t top();

(3)入棧:void push(const t &t);

(4)出棧:void pop();

(5)推斷是否棧空:bool empty()。

假設想使用stl定義的容器介面卡stack,須要引用stack標頭檔案,即#include

以下給出stack介面卡的實現**:

#include#includeusing namespace std;
/*******************stack介面卡的定義**************/

template>

class stack

;

/******************各個函式介面的類外實現**********************/

templatebool operator==(const stack&x, const stack&y)//推斷兩個介面卡是否相等

templatebool operator<(const stack& x,const stack& y)//推斷介面卡x是否小於介面卡y

template//類外無需加預設形參

//假設寫成size_type stack::size()const是錯誤的,由於size_type是在類內定義的,且typename最好也加上

typename stack::size_type stack::size()const

templatetypename stack::reference stack::top()//底層實現是返回最後乙個容器的元素

templatetypename stack::const_reference stack::top()const//top函式的過載

templatevoid stack::push(const value_type & x)//底層實現是向基礎容器的尾部加入元素

templatevoid stack::pop()//底層實現是將基礎容器的尾部元素彈出

參考資料:

[1]《stl源**剖析 侯捷》

[2]《c++ primer 第4版》

STL之容器介面卡

在stl中定義了三種容器介面卡 queue,priority queue,和stack。容器介面卡是利用基本容器 如之前介紹的deque,vector,list 作為自己的底層容器,適配它以實現自己特定功能的容器。容器介面卡有乙個共同的特點 都不支援迭代器 iterator 特點 fifo 先進先出...

STL 容器介面卡

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

STL容器介面卡

stl學習系列之六 容器介面卡 stl提供了三種容器介面卡 stack,queue,priority queue。介面卡並不是第一類容器,因為它們並沒有提供與元素的儲存形式有關的真正資料結構實現,並且介面卡不支援迭代器。介面卡的優點是 能夠使程式設計師選擇一種合適的底層資料結構。這三個介面卡類都提供...