1. 程式人生 > >C++ STL--stack堆疊容器學習筆記

C++ STL--stack堆疊容器學習筆記

    堆疊是一個線性表,插入和刪除只在表的一段進行,該端稱為棧頂,另一端稱為棧底。堆疊的元素插入稱為入棧,元素的刪除稱為出棧。由於元素的出與入均在棧頂進行,則堆疊是一個後進先出表,即LIFO(last in first out)。

C++ STL的堆疊泛化是直接通過現有的序列容器來實現的,預設的是使用雙端佇列deque的資料結構,當然也可以用其他線性表vectorlist

實際上在我們使用的時候,我們只使用堆疊的入棧、出棧、棧頂元素的訪問、判斷是否為空、獲取堆疊的大小等功能。

stack具體應用

建立stack物件

    在使用堆疊前,先利用建構函式進行初始化,建立一個堆疊物件,以便之後進行元素的入棧和出棧等相關操作。

1)stack()

    預設的建構函式,建立一個空的stack物件

    stack<int> s;

2)stack(const stack&)

    複製建構函式,用一個stack堆疊建立一個新的堆疊。

    stack<list,list<int>> s2(s1);

元素入棧

    stack堆疊容器的元素入棧函式為push函式,由於c++ stl的堆疊不是預設大小的,因此,入棧函式就不考慮堆疊空間是否為滿,均將元素壓入堆疊,從而函式沒有標明入棧成功與否的返回值。

    void push(const value_type& x)

    元素入棧,將元素x壓入堆疊,成為棧頂元素。

    下面的例項程式碼為將元素依次壓入堆疊

stack<int> s;
s.push(3);
s.push(19);
s.push(23);
s.push(36);
s.push(50);

元素出棧

    stack容器的元素出棧函式為pop函式。由於函式並沒有判斷堆疊是否為非空,才進行元素的彈出;因此,需要自行判斷堆疊是否為空,才可執行pop函式。

    void pop()

    元素出棧,將棧頂元素從堆疊中刪除。該函式並不返回出棧的棧頂元素,一般需要先將棧頂元素取出,才執行出棧操作。

    下面的例項程式碼為將堆疊中的所有元素全部出棧

while(!s.empty())
{
    s.pop();//出棧
}
取棧頂元素

    stack容器的棧頂元素的讀取函式為top函式

    取出棧頂元素,此函式也要先判斷堆疊是否為空,取出棧頂元素才有意義
    下面例項程式碼為在元素出棧前,先將棧頂元素取出

cout<< s.top()<<endl;//列印棧頂元素
s.pop();//出棧

堆疊非空判斷

    隨著棧頂元素的不斷出棧,堆疊可能會出現空的情況;因此一般需要呼叫empty函式判斷是否為非空,才作元素的出棧和取棧頂元素的操作。

bool empty()

    判斷堆疊是否為空,返回true表示堆疊已空,false表示堆疊非空。 

堆疊的大小

    堆疊的元素個數可用size函式獲得。每次元素入棧前,先檢查當前堆疊的大小,超過某個界限值,則不允許元素入棧,此可實現一個具有一定容量限制的堆疊。

size_type size()返回當前堆疊的元素個數

    下面的例項程式碼為判斷是否棧滿,若無,則可繼續壓棧

if(s.size()<STACK_SIZE)//堆疊未滿,元素才可入棧
{
    s.push(1);
}