C++STL特殊容器stack
stack的基本效能
stack準確的說並不是STL framework所提供的容器,而是一個為了滿足特殊需求而設計的容器。屬於 容器介面卡 (container adapter),它提供了簡單而清晰的介面滿足我們對資料結構堆疊的需求。
對於stack(也稱LIFO,後進先出),我們可以使用 push()將任意數量的元素放入stack內,也可以使用 pop()將元素以其插入的反序從容器中移除。
上圖可以很形象的看出,我們的壓入順序是A->B,待到我們彈出時的順序就變成了B->A。
stack使用須知
1.包含標頭檔案
1 #include<stack>
2.在標頭檔案<stack>中,class stack 定義如下
1 namespace std 2 { 3 template <typename T, 4typename Container = deque<T>> 5class stack; 6 }
第一個template引數代表元素型別,帶有預設值的第二個template引數用來定義stack內部存放元素的實際容器, 預設為deque 。
很多人問為什麼不用vector,具體原因可能是dequ有移除元素時會自動釋放記憶體,並且不必在重新分配reallocation時複製全部元素的優點。
3.我們可以 自定義stack的內部容器
stack的實現只是很單純的把各項操作轉化為內部容器的對應呼叫,事實上,你可以使用任何sequence容器支援stack,只要它們提供函式:back()、push_back()、pop_back。
舉個栗子
1 stack<int> st;//定義一個int型別內部為deque的stack 2 stack<int,vector<int>> st; //定義一個int型別內部為vector的stack
stack核心操作
1. 核心介面成員函式
1 st.push();//將一個元素放入stack內 2 st.top();//返回stack內的“下一個”元素 3 st.pop();//從stack中移除元素
注意,pop彈出棧頂元素但不返回它,top返回棧頂元素但不移除它。兩者在stack為空時使用會造成不明確的行為,所以在使用前可以採用 empty() 來檢驗stack是否為空
2.常用函式
1 st.size();//返回stack內元素數量 2 st.empty(); //返回容器是否為空
3.comparison的過載
stack支援兩個相同型別間的比較(比較原則是字典序), 從棧底元素開始比較
comparison可以是下列任何運算:==、 !=、 >=、 <=、 >、 <。
本文主要針對的是競賽方向的stack使用,沒有涉及更深度的使用,若有錯誤,請提出指正。
如果能幫助到您,我會非常開心QWQ
2019-01-31