棧和是一種容器適配器,專門設計用於在LIFO上下文(後進先出)中操作,其中元素僅從容器的一端插入和提取。
而隊列則是FIFO,其元素從隊列尾部進入,頭部出
棧的元素從被稱作“棧頂”的位置彈出/放入,容器只允許在棧頂一段進行操作,如圖所示
在c++中使用棧和隊列需要#include<stack>或#include<queue>
其包含以下成員函數
size() 返回大小
empty() 返回容器是否爲空
top() 返回頂部元素
push(element) 將element壓棧或壓入隊列尾部
pop() 將棧頂或隊列頭部元素出棧(無返回值)
emplace(element) 在堆棧或隊列頂部添加一個新元素,位於當前頂層元素上方。 這個新元素是通過構造函數的參數傳遞參數構建的。(C++11)
swap(another) 交換兩個棧或隊列的內容(c++11)
雙端隊列
deque是雙端隊列,其與普通隊列不同之處爲雙端隊列可以再隊列的兩端插入和刪除元素
其可以類似的看做添加了頭尾插入和刪除接口的vector
有關vector的見我另一篇博客map,set,vector,string筆記整理(C++)
優先級隊列
優先級隊列是以種堆結構,其元素通過某一規則(如從小到大)排列
其聲明方式爲priority_queue<type,container,function> pq;
其中type爲元素類型,container爲實現優先級隊列的容器,需要注意的是,這裏的容器必須是以數組實現的結構
function爲比較函數,默認爲less<T>,即元素是從大到小排列,每次pop會去除最大元素,如果設爲greater<T>則相反
其成員函數與作用於queue相同