欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

c++ STL容器之栈stack

程序员文章站 2024-01-19 17:25:22
...

Stack简介

C++ Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,——也就是说实现了一个先进后出(FILO)的数据结构。

 

Stack初始化

stack<int>  s;

通过s.push() 为栈赋值,如

s.push(1);

 

stack常用函数

c++ STL容器之栈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);

运行结果

c++ STL容器之栈stack

由此,我们不难发现,所谓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;
}
 

运行结果

c++ STL容器之栈stack