C STL stack容器介面卡

2022-09-09 23:24:26 字數 2231 閱讀 7357

stack 棧介面卡是一種單端開口的容器,實際上該容器模擬的就是棧儲存結構,即無論是向里存資料還是從中取資料,都只能從這乙個開口實現操作。

stack 介面卡的開頭端通常稱為棧頂。由於資料的存和取只能從棧頂處進行操作,因此對於訪問資料,stack 介面卡有這樣的特性,即每次只能訪問介面卡中位於最頂端的元素,也只有移除 stack 頂部的元素之後,才能訪問位於棧中的元素

棧中儲存的元素滿足「後進先出(簡稱lifo)」的準則,stack 介面卡也同樣遵循這一準則。

stack 介面卡以模板類 stack>(其中 t 為儲存元素的型別,container 表示底層容器的型別)的形式位於標頭檔案中,並定義在 std 命名空間裡。

1) 建立乙個不包含任何元素的 stack 介面卡,並採用預設的 deque 基礎容器:

std::stackvalues;
上面這行**,就成功建立了乙個可儲存 int 型別元素,底層採用 deque 基礎容器的 stack 介面卡。

2) 上面提到,stack> 模板類提供了 2 個引數,通過指定第二個模板型別引數,我們可以使用出 deque 容器外的其它序列式容器,只要該容器支援 empty()、size()、back()、push_back()、pop_back() 這 5 個成員函式即可。

序列式容器中同時包含這 5 個成員函式的,有 vector、deque 和 list 這 3 個容器。因此,stack 介面卡的基礎容器可以是它們 3 個中任何乙個。例如,下面展示了如何定義乙個使用 list 基礎容器的 stack 介面卡:

std::stack> values;
3) 可以用乙個基礎容器來初始化 stack 介面卡,只要該容器的型別和 stack 底層使用的基礎容器型別相同即可。例如:

std::listvalues ;

std::stack> my_stack (values);

注意,初始化後的 my_stack 介面卡中,棧頂元素為 3,而不是 1。另外在第 2 行**中,stack 第 2 個模板引數必須顯式指定為 list(必須為 int 型別,和儲存型別保持一致),否則 stack 底層將預設使用 deque 容器,也就無法用 lsit 容器的內容來初始化 stack 介面卡。

4) 還可以用乙個 stack 介面卡來初始化另乙個 stack 介面卡,只要它們儲存的元素型別以及底層採用的基礎容器型別相同即可。例如:

std::listvalues;

std::stack> my_stack1(values);

std::stack> my_stack=my_stack1;

//std::stack> my_stack(my_stack1);

可以看到,和使用基礎容器不同,使用 stack 介面卡給另乙個 stack 進行初始化時,有 2 種方式,使用哪一種都可以。

注意,第 3、4 種初始化方法中,my_stack 介面卡的資料是經過拷貝得來的,也就是說,操作 my_stack 介面卡,並不會對 values 容器以及 my_stack1 介面卡有任何影響;反過來也是如此。

成員函式

功能empty()

當 stack 棧中沒有元素時,該成員函式返回 true;反之,返回 false。

size()

返回 stack 棧中儲存元素的個數。

top()

返回乙個棧頂元素的引用,型別為 t&。如果棧為空,程式會報錯。

push(const t& val)

先複製 val,再將 val 副本壓入棧頂。這是通過呼叫底層容器的 push_back() 函式完成的。

push(t&& obj)

以移動元素的方式將其壓入棧頂。這是通過呼叫底層容器的有右值引用引數的 push_back() 函式完成的。

pop()

彈出棧頂元素。

emplace(arg...)

arg... 可以是乙個引數,也可以是多個引數,但它們都只用於構造乙個物件,並在棧頂直接生成該物件,作為新的棧頂元素。

swap(stack& other_stack)

將兩個 stack 介面卡中的元素進行互換,需要注意的是,進行互換的 2 個 stack 介面卡中儲存的元素型別以及底層採用的基礎容器型別,都必須相同。

參考c語言中文呢我那個-stl-stack

容器介面卡(棧容器介面卡 佇列容器介面卡)

我們已有的容器 比如vector list 這個容器支援的操作很多,比如插入,刪除,迭代器訪問等等。而我們希望這個容器表現出來的是棧的樣子 先進後出,入棧出棧等等,此時,我們沒有必要重新動手寫乙個新的資料結構,而是把原來的容器重新封裝一下,改變它的介面,就能把它當做棧使用了。c 定義了三種容器介面卡...

容器介面卡

容器介面卡通常是讓一種已存在的容器型別採用另一種不同的抽象型別的工作方式實現,一般情況下,它的初始化需要傳遞乙個容器作為引數,而它所有的操作也是在這個容器上實現的。標準庫提供了三種順序容器介面卡 stack queue priority queue,使用它們時需要包含 include 和 inclu...

容器介面卡

容器介面卡 stl 中包含三種介面卡 棧stack 佇列queue 和優先順序priority queue 介面卡是容器的介面,它本身不能直接儲存元素,它儲存元素的機制是呼叫另一種順序容器去實現,即可以把介面卡看作 它儲存乙個容器,這個容器再儲存所有元素 stl 中提供的三種介面卡可以由某一種順序容...