STL原始碼剖析——stack的實現原理和使用方法詳解
阿新 • • 發佈:2018-11-01
Stack 簡介
stack 是堆疊容器,是一種“先進後出”的容器。
stack 是簡單地裝飾 deque 容器而成為另外一種容器。
使用 stack 時需要加上標頭檔案 #include<stack> 。
stack 實現原理
以某種既有容器作為底部結構,將其介面改變,使之符合“先進後出”的特性,形成一個 stack,是很容易做到的。deque 是雙向開口的資料結構,若以 deque 為底部結構並封閉其頭端開口,便輕而易舉地形成了一個 stack。因此,STL便以 deque 作為預設情況下的 stack 底部結構。
由於 stack 系以底部容器完成其所有工作,而具有這種“修改某物介面,形成另一種風貌”之性質者,稱為 adapter(配接器),因此 stack 往往被歸類為容器配接器。
stack 物件的預設構造
stack 採用模板類實現,stack 物件的預設構造形式:stack<T> stkT ;
尖括號內還可以設定指標型別或自定義型別。stack <int> stkInt; //一個存放int的stack容器。 stack <float> stkFloat; //一個存放float的stack容器。 stack <string> stkString; //一個存放string的stack容器。
stack 的push()與pop()方法
stack 物件的拷貝構造與賦值stack.push(elem); //往棧頭新增元素 stack.pop(); //從棧頭移除第一個元素 stack<int> stkInt; stkInt.push(1); stkInt.push(3); stkInt.pop(); stkInt.push(5); stkInt.push(7); stkInt.push(9); stkInt.pop(); stkInt.pop(); //此時stkInt存放的元素是1,5
stack(const stack &stk); //拷貝建構函式
stack& operator=(const stack &stk); //過載等號操作符
stack<int> stkIntA;
stkIntA.push(1);
stkIntA.push(3);
stkIntA.push(5);
stkIntA.push(7);
stkIntA.push(9);
stack<int> stkIntB(stkIntA); //拷貝構造
stack<int> stkIntC;
stkIntC = stkIntA; //賦值
stack 的資料存取
stack.top(); //返回最後一個壓入棧元素
stack<int> stkIntA;
stkIntA.push(1);
stkIntA.push(3);
stkIntA.push(5);
stkIntA.push(7);
stkIntA.push(9);
int iTop = stkIntA.top(); //9
stkIntA.top() = 19; //19
stack 的大小
stack.empty(); //判斷堆疊是否為空
stack.size(); //返回堆疊的大小
stack<int> stkIntA;
stkIntA.push(1);
stkIntA.push(3);
stkIntA.push(5);
stkIntA.push(7);
stkIntA.push(9);
if (!stkIntA.empty())
{
int iSize = stkIntA.size(); //5
}