標準庫提供了三種順序容器介面卡:queue、priority_queue、stack.介面卡是標準庫中通用的
概念,包括容器介面卡、迭代器介面卡和函式介面卡。
本質上,介面卡是使一事物的行為類似於另一類事物的行為的一種機制。容器介面卡讓一種已
存在的容器型別採用另一種不同的抽象型別的工作方式實現。例如,stack介面卡可使任何一種順
序容器以棧的方式工作。如下列出了所有容器介面卡通用的操作和型別。
size_type 一種型別,足以儲存此介面卡型別最大物件的長度
value_type 元素型別
container_type 基礎容器型別,介面卡在此容器型別上實現
a a; 建立乙個新的空介面卡,命名為a
a a(c); 建立乙個名為a的新介面卡,初始化為容器c的副本
關係操作符 所有介面卡都支援全部關係操作符:==、!=、<、<=、>、>=
#include#include
介面卡的初始化
dequedeq;
stackstk(deq); //將deq中的元素複製到stk中
覆蓋基礎容器型別
預設的stack和queue都基於deque容器實現,而priority_queue則在vector容器上實現。在建立適
配器時,通過將乙個順序容器指定為介面卡的第二個型別實參,可覆蓋其關聯的基礎容器型別:
stack< string, vector> str_stk;
stack< string, vector> str_stk(svec);
對於給定的介面卡,其關聯的容器必須滿足一定的約束條件。stack介面卡所關聯的基礎容器可以是
任何一種順序容器型別。因此,stack棧可以建立在vector、list、deque容器之上。而queue介面卡
要求其關聯的基礎容器必須提供push_front運算,因此只能建立在list和deque容器上,而不能建立
在vector容器上。priority_queue介面卡要求提供隨機訪問功能,因此可建立vector或deque容器上,
但不能建立在list容器上。
介面卡的關係運算
兩個相同型別的介面卡可以做==、!=、<、<=、>、>= 關係比較,只要基礎元素型別支援等於和小
於操作符即可。這些關係運算由元素依次比較來實現。第一對不相等的元素將決定兩者之間的小於
或大於關係。
棧介面卡
s.empty() 如果棧為空,返回true,否則返回false
s.size() 返回棧中元素的個數
s.pop() 刪除棧頂元素,但不返回其值
s.top() 返回棧頂元素,但不刪除其值
s.push(item) 在棧頂壓入新元素
佇列和優先順序佇列
q.empty() 如果對列為空,返回true,否則返回false
q.size() 返回佇列中元素的個數
q.pop() 刪除佇列首元素,但不返回其值
q.front() 返回佇列首元素的值,但不刪除該元素 該操作適用於queue而非priority_queque
q.back() 返回隊尾元素的值,而不刪除該元素 該操作適用於queue而非priority_queque
q.top() 返回具有最高優先順序的元素值,但不刪除該元素 該操作適用於priority_queque
q.push(item) 對於queue,在隊尾壓入乙個新元素
對於priority_queue,在基於優先順序的適當位置插入新元素
注意:所有容器介面卡都根據其基礎容器型別所支援的操作來定義自己的操作。例如,預設情況下
棧介面卡建立在deque容器上,因此採用deque提供的操作來實現棧功能。比如說,執行下面的語
句 intstack.push(ix++); 這個操作通過呼叫push_back操作來實現,而該push_back操作由intstack
所基於的deque物件提供。儘管棧是以deque容器為基礎實現的,但是程式設計師不能直接訪問deque
所提供的操作。不能在棧上呼叫push_back函式,而是必須使用棧所提供的名為push的操作。
C STL 容器介面卡
1 stack 2 priority queue include 1 基礎介紹 priority queue 優先佇列,其底層是用堆來實現的。模板宣告帶有三個引數 priority queue 其中type為資料型別,container 為儲存資料的容器,functional 為元素比較方式。con...
c STL 之容器介面卡
容器介面卡是乙個封裝了序列容器的類模版,它在一般序列容器的基礎上提供了一些不同功能。它們可以指定底層序列容器的型別。標頭檔案 include 特點 乙個預設封裝了deque雙端佇列容器的介面卡類模版,實現的是乙個 先出的壓入棧。成員函式 作用top 返回乙個棧頂元素的引用,型別為t 如果棧為空,返回...
容器介面卡(棧容器介面卡 佇列容器介面卡)
我們已有的容器 比如vector list 這個容器支援的操作很多,比如插入,刪除,迭代器訪問等等。而我們希望這個容器表現出來的是棧的樣子 先進後出,入棧出棧等等,此時,我們沒有必要重新動手寫乙個新的資料結構,而是把原來的容器重新封裝一下,改變它的介面,就能把它當做棧使用了。c 定義了三種容器介面卡...