1. 程式人生 > >STL原始碼剖析——stack的實現原理和使用方法詳解

STL原始碼剖析——stack的實現原理和使用方法詳解

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.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 物件的拷貝構造與賦值

	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
	}