除了順序容器外,標準庫還定義了三個順序容器介面卡:stack,queue和priority_queue。介面卡是一種機制,能夠使某種事物行為看起來像另外一種事物。乙個容器介面卡接受一種已有的容器型別,使其行為看起來像一種不同的型別。
所有容器介面卡都支援的操作和型別:
操作和型別
說明size_type
一種足以儲存當前型別最大物件的大小的型別
value_type
元素型別
container_type
實現介面卡的底層容器型別
a a建立乙個名為a的空介面卡
a a(c)
建立乙個名為a的介面卡,帶有容器c的拷貝
關係運算子
每個介面卡都支援所有關係運算子,這些運算子返回底層容器的比較結果
a.empty()
如果a包含任何元素,返回false
a.size()
返回a中的元素數目
swap(a,b)
互動a和b中的內容,a和b必須有相同型別,包括底層容器型別也必須相同
a.swap(b)
同上預設情況下,stack和queue是基於deque實現的,priority_queue是在vector之上實現的,我們可以在建立乙個介面卡時將乙個命名的順序容器作為第二個型別引數來過載預設容器型別。
int
main()
棧介面卡預設基於deque實現,也可以在list或vector上實現,棧的操作包括
操作說明
s.pop()
刪除棧頂元素,但不返回該元素值
s.push(item)
建立乙個新元素壓入棧頂
s.emplace(args)
通過args建立乙個新元素壓入棧頂
s.top()
返回棧頂元素,但不將元素彈出棧
int
main()
system
("pause");
}
queue預設基於deque實現,也可以用list實現,priority_queue預設基於vector實現,也可以用deque實現。
佇列是一種先進先出的資料結構,priority_queue允許我們為佇列中的元素建立優先順序,新加入的元素會排在所有優先順序比它低的已有元素之前。佇列的操作包括:
操作說明
q.pop()
刪除queue的首元素或priority_queue的最高優先順序的元素
q.front(),q.back()
返回首元素或尾元素,但不刪除此元素,只適用於queue
q.top()
返回最高優先順序的元素,但不刪除此元素,只適用於priority_queue
q.push(item)
在queue末尾或priority_queue中恰當的位置建立乙個元素
q.emplace(args)
同上
int
main()
system
("pause");
}
容器介面卡(棧容器介面卡 佇列容器介面卡)
我們已有的容器 比如vector list 這個容器支援的操作很多,比如插入,刪除,迭代器訪問等等。而我們希望這個容器表現出來的是棧的樣子 先進後出,入棧出棧等等,此時,我們沒有必要重新動手寫乙個新的資料結構,而是把原來的容器重新封裝一下,改變它的介面,就能把它當做棧使用了。c 定義了三種容器介面卡...
C 容器介面卡
1 什麼是介面卡 2 容器介面卡 3 為什麼將stack queue和priority queue稱作為容器介面卡 雖然stack queue priority queue中也可以存放元素,但在stl中並沒有將其劃分在容器的行列,而是將其稱為容器介面卡,這是因為每個容器在底層都有自己的實現方式,而s...
C 容器介面卡
除去順序容器vector 向量,可變大小陣列 deque 雙端佇列 list 雙向鍊錶 forward list 單向鍊錶 array 固定陣列大小,array的大小不可變 外,標準庫還定義了三個順序容器介面卡 stack queue priority queue 介面卡是標準庫中乙個通用的概念,包...