介面卡是一種設計模式(設計模式是一套被反覆使用的、多數人知曉的、經過分類編目的、**設計經驗的總結),該模式是將乙個類的介面轉換成客戶希望的另外乙個介面。
雖然stack、queue、priority_queue中也可以存放元素,但在stl中並沒有將其劃分在容器的行列,而是將其稱為容器介面卡,這是因為每個容器在底層都有自己的實現方式,而stack、queue、priority_queue只是在底層將其他容器進行了封裝,比如:
**示例:
namespace bit
void
push
(const t& x)
void
pop(
) t&
top(
)const t&
top(
)const
size_t size()
const
bool
empty()
const
private
: con _c;};
}namespace bit
void
push
(const t& x)
void
pop(
) t&
back()
const t&
back()
const
t&front()
const t&
front()
const
size_t size()
const
bool
empty()
const
private
: con _c;};
}namespace bit
template
<
class
inputiterator
>
priority_queue
(inputiterator first, inputiterator last):c
(first, last)
bool
empty()
const
size_t size()
const
t&top(
)const
void
push
(const t & x)
void
pop(
)private
: sequence c;
compare comp;};
}
stack是一種後進先出的特殊線性資料結構,因此只要具有push_back()和pop_back()操作的線性結構,都可以作為stack的底層容器,比如vector和list都可以;queue是先進先出的特殊線性資料結構,只要具有 push_back和pop_front操作的線性結構,都可以作為queue的底層容器,比如list。但是stl中對stack和 queue預設選擇deque作為其底層容器,主要是因為:
stack和queue不需要遍歷(因此stack和queue沒有迭代器),只需要在固定的一端或者兩端進行操作。
在stack中元素增長時,deque比vector的效率高;queue中的元素增長時,deque不僅效率高,而且記憶體使用率高。
總結一句話 :deque在兩端進行增長和刪除的速度是最快的
要點總結:
stack
queue
預設介面卡
deque
deque
可選介面卡
vector、list
list
需要操作
push => push_back、pop => pop_back、top => back
push => push_back、pop => pop_front、back => back、front=> front
priority_queue:
#include (仿函式)
預設介面卡:vector
預設比較方式:less
可選介面卡:deque
可選比較方式:greater
#include (演算法)
構造 => make_heap
push => push_back + push_heap
pop => pop_front + pop_heap
top => front
仿函式:可以當成函式使用的類,方法是過載函式呼叫運算子("()")
容器介面卡(棧容器介面卡 佇列容器介面卡)
我們已有的容器 比如vector list 這個容器支援的操作很多,比如插入,刪除,迭代器訪問等等。而我們希望這個容器表現出來的是棧的樣子 先進後出,入棧出棧等等,此時,我們沒有必要重新動手寫乙個新的資料結構,而是把原來的容器重新封裝一下,改變它的介面,就能把它當做棧使用了。c 定義了三種容器介面卡...
C 容器介面卡
1 什麼是介面卡 2 容器介面卡 3 為什麼將stack queue和priority queue稱作為容器介面卡 雖然stack queue priority queue中也可以存放元素,但在stl中並沒有將其劃分在容器的行列,而是將其稱為容器介面卡,這是因為每個容器在底層都有自己的實現方式,而s...
C 容器介面卡
除了順序容器外,標準庫還定義了三個順序容器介面卡 stack,queue和priority queue。介面卡是一種機制,能夠使某種事物行為看起來像另外一種事物。乙個容器介面卡接受一種已有的容器型別,使其行為看起來像一種不同的型別。所有容器介面卡都支援的操作和型別 操作和型別 說明size type...