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;
}
 

运行结果


猜你喜欢

转载自blog.csdn.net/young_Tao/article/details/79822163