1. 程式人生 > >c++ STL容器之棧stack

c++ STL容器之棧stack

Stack簡介

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

Stack初始化

stack<int>  s;

通過s.push() 為棧賦值,如

s.push(1);

stack常用函式

這裡我們著重講解函式swap():

先看一段程式碼:

//以下程式碼用來測試swap()函式的作用
    stack<int> s1,s2;

    //對棧s1賦值
    s1.push(1);
    s1.push(2);
    s1.push(3);

    //對棧s2賦值
    s2.push(9);
    s2.push(8);

    //此時s1內有三個值,s2內有兩個值
    cout << "swap前s1的大小: " << s1.size() << endl;
    print(s1);
    cout << "swap前s2的大小: " << s2.size() << endl;
    print(s2);

    s1.swap(s2);

    cout << "swap後s1的大小: " << s1.size() << endl;
    print(s1);
    cout << "swap後s2的大小: " << s2.size() << endl;
    print(s2);

執行結果


由此,我們不難發現,所謂swap函式即是將兩個棧物件進行交換,相當於名字互換。

一個介紹棧函式的小程式

#include <iostream>
#include <stack>

using namespace std;

//這裡我們抽象一個函式用來列印棧中的值
void print(stack<int> s)
{
    while(!s.empty())
    {
        //s.top()用來返回棧頂的值
        cout << s.top() << endl;
        //s.pop()用來去除頂部元素
        s.pop();
    }
}


int main()
{
    stack<int> s;
    cout << "判斷棧是否為空" << s.empty() << endl;
    cout << "初始化時棧的大小" << s.size() << endl;

    for(int i = 0; i < 10;i ++)
    {
        s.push(i);
    }
    cout << "判斷棧是否為空" << s.empty() << endl;
    cout << "初始化後棧的大小" << s.size() <<endl;
    cout << "棧的top指標的值" << s.top() << endl;


    //返回棧頂的元素
    cout << "棧頂的元素: " << s.top() <<endl;

    //遍歷棧的元素
    while(!s.empty())
    {
        //s.top()用來返回棧頂的值
        cout << "棧頂的值" << s.top() << endl;
        //s.pop()用來去除頂部元素
        s.pop();
    }
    cout << "判斷棧是否為空" << s.empty() << endl;
    cout << "呼叫pop()後棧的大小" << s.size() <<endl;
    //cout << "空棧的top指標的值" << s.top() << endl;   //程式走到這一步會崩潰,因為top指標此時沒有任何指向



    //以下程式碼用來測試swap()函式的作用
    stack<int> s1,s2;

    //對棧s1賦值
    s1.push(1);
    s1.push(2);
    s1.push(3);

    //對棧s2賦值
    s2.push(9);
    s2.push(8);

    //此時s1內有三個值,s2內有兩個值
    cout << "swap前s1的大小: " << s1.size() << endl;
    print(s1);
    cout << "swap前s2的大小: " << s2.size() << endl;
    print(s2);

    s1.swap(s2);

    cout << "swap後s1的大小: " << s1.size() << endl;
    print(s1);
    cout << "swap後s2的大小: " << s2.size() << endl;
    print(s2);

    return 0;
}
 

執行結果