C++ stack,STL stack詳解

2020-07-16 10:04:24
stack 是容器介面卡的一種。要使用 stack,必須包含標頭檔案 <stack>。

stack就是“棧”。棧是一種後進先出的元素序列,存取和刪除都只能對棧頂的元素(即最後一個被加入棧的元素)進行,並且元素也只能被新增到棧頂。棧內的元素不能存取。如果一定要存取棧內的元素,只能將其上方的元素全部從棧中刪除,使之變成棧頂元素才可以。

stack的定義如下:

template < class T, class Cont == deque <T> >
class stack{
    ...
};

第二個參數列明,在預設情況下,stack 就是用 deque 實現的。當然,也可以指定用 vector 或 list 實現。

雖然 stack 使用順序容器實現,但它不提供順序容器具有的成員函數。除了 size、 empty 這兩個所有容器都有的成員函數外,stack 還有以下三個成員函數,如表 1 所示。

表1:stack的成員函數
成員函數 功  能
void pop(); 彈出(即刪除)棧頂元素
T & top(); 返回棧頂元素的參照。通過此函數可以讀取棧頂元素的值,也可以修改棧頂元素
void push (const T & x); 將 x 壓入棧頂

例題:編寫程式,輸入一個十進位制數 n 和進位制 k(k≤10),輸出 n 對應的 k 進位制數。
#include <iostream>
#include <stack>  //使用stack需要包含此標頭檔案
using namespace std;
int main()
{
    int n, k;
    stack <int> stk;
    cin >> n >> k;  //將n轉換為k進位制數
    if (n == 0) {
        cout << 0;
        return 0;
    }
    while (n) {
        stk.push(n%k);
        n /= k;
    }
    while (!stk.empty()) {
        cout << stk.top();
        stk.pop();
    }
    return 0;
}