C Stack STL容器介紹

2021-08-18 07:46:39 字數 2880 閱讀 7634

stack堆疊容器

堆疊是乙個線性表,插入和刪除只在表的一端進行。這一端稱為棧頂(stack top),另一端則為棧底(stack bottom)。堆疊的元素插入稱為入棧,元素的刪除稱為出棧。由於元素的入棧和出棧總在棧頂進行,因此,堆疊是乙個後進先出(last in first out)表,即 lifo 表。

c++ stl 的堆疊泛化是直接通過現有的序列容器來實現的,預設使用雙端佇列deque的資料結構,當然,可以採用其他線性結構(vector 或 list等),只要提供堆疊的入棧、出棧、棧頂元素訪問和判斷是否為空的操作即可。由於堆疊的底層使用的是其他容器,因此,堆疊可看做是一種介面卡,將一種容器轉換為另一種容器(堆疊容器)。

為了嚴格遵循堆疊的資料後進先出原則,stack 不提供元素的任何迭代器操作,因此,stack 容器也就不會向外部提供可用的前向或反向迭代器型別。

stack堆疊容器的c++標準標頭檔案為 stack ,必須用巨集語句 "#include " 包含進來,才可對 stack 堆疊的程式進行編譯。

建立 stack 物件

使用堆疊前,先要利用建構函式進行初始化,建立乙個堆疊物件,以進行元素的入棧、出棧等操作。

1.    stack()

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

例如,下面一行**使用預設的 deque 為底層容器,建立乙個空的堆疊物件 s 。

stacks;

2.    stack(const stack&)

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

例如,下面的**利用 s1 ,建立乙個以雙向鍊錶為底層容器的空堆疊物件 s2 。

// stack>   s1;

stack>   s2(s1);

元素入棧

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

如下是他的使用原型:

void  push(const value_type& x)

元素出棧

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

void pop()

下面的示例**,將堆疊的所有元素全部出棧

// stacks;

while(!s.empty())

取棧頂元素

stack容器的棧頂元素的讀取函式為 pop 函式,將取出最後入棧的元素,如下是它的使用原型

value_type&  top()

堆疊非空判斷

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

bool  empty()

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

c++ stl棧stack介紹

c++ stack(堆疊) 是乙個容器類的改編,為程式設計師提供了堆疊的全部功能,——也就是說實現了乙個先進後出(filo)的資料結構。

c++ stl棧stack的標頭檔案為: 

#include

c++ stl棧stack的成員函式介紹

操作比較和分配堆疊

empty()堆疊為空則返回真

pop()移除棧頂元素

push()在棧頂增加元素

size()返回棧中元素數目

top()返回棧頂元素

[cpp]view plain

copy

//----------------------------------------- 讀取堆疊的棧頂元素

#include 

#include 

using

namespace

std;  

intmain()  

return

0;  

}[cpp]view plain

copy

/*    堆疊的大小

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

size_type  size()

返回當前堆疊的元素個數

下面的示例程式,將堆疊的大小設定為 100 個 int 元素,而且使用 list 雙向鍊錶做堆疊的底層容器,每次壓入元素時均判斷堆疊的大小是否超過100個元素的界限,從而實現具有容量限制的堆疊。

*/----------------------------------------- 限制堆疊的大小  

#include 

#include 

#include 

#define stack_size  100   // 堆疊最大容量

using

namespace

std;  

intmain()  

return

0;  

}  ----------------------- stack 小結

堆疊是一種應用非常廣泛的資料結構。c++ stl 將這種資料結構和它若干受限制操作用泛型類 stack 容器封裝出來,包括堆疊初始化、元素入棧、取棧頂元素、元素出棧、判斷堆疊是否非空和取得當前堆疊大小等,應用起來十分容易。

stack的元素出棧操作是不返回棧頂元素的,需要另外通過取棧頂函式獲得。這種分離實現是考慮到出棧函式若直接返回棧頂元素,將會導致返回值的資料引用安全問題或不必要的低效複製函式的呼叫。

從 stack 內部實現看,stack 堆疊是不設最大容量的,但可通過 size 函式獲取當前堆疊的大小,以判斷是否允許繼續讓元素入棧,實現具有最大容量限制的堆疊。

c queue容器介紹

一.queue模版類的定義在標頭檔案中。queue與stack模版非常類似,queue模版也需要定義兩個模版引數,乙個是元素型別,乙個是容器型別,元素型別是必要的,容器型別是可選的,預設為dqueue型別。定義queue物件的示例 如下 queueq1 queueq2 queue的基本操作有 1.入...

STL容器介紹

fighting進行時 2016.1.12 2016第一彈,明天考試 壓力賊大。廢話不多說了,今天學了stl裡的vector list set map。vector是乙個是個動態的陣列,相比陣列來講,有乙個好處 因為陣列呢,是一段連續的記憶體,如果說你要用10000個吧,但是你最開始只開了100個,...

STL容器介紹

stl的容器可以分為以下幾個大類 一 序列容器,有vector,list,deque,string.二 關聯容器,有set,multiset,map,mulmap,hash set,hash map,hash multiset,hash multimap 三 其他的雜項 stack,queue,va...