STL的stack和queue读书笔记

本文详细介绍了STL中的栈(stack)与队列(queue),包括它们的基本概念、内部实现原理及常用操作方法。栈是一种先进后出的数据结构,而队列遵循先进先出的原则。文章还提供了具体的代码示例,帮助读者更好地理解和使用这两种数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其实stack(栈)在学习数据结构的时候就已经接触过了,栈是功能被阉割的线性表,只有一个入口,是一种先入后出的数据结构化,因为其简单操作,其实用到的地方还是挺广泛的,但本文不展开讲,因为主题还是在STL上,自然也是主要说STL的栈。

STL中的stack不是一种容器,而是容器适配器。即stack实在前面说到的容器的基础上封装而来的。从stack先进后出的特性来看,只要是线性的数据结构其实都可以作为栈的底层容器。

STL中栈的默认是以deque来作为底层数据结构的,且封装的很简单,只对stack暴露出操作尾部的接口,其实也可以用list,vector来作为底层数据结构。stack的源码中使用了底层容器的empty(),size(),back(),push_back(),pop_back(),还有各种常见的运算符重载等方法。如果我们自己实现的数据结构中实现了相应的方法,也可以直接作为stack的底层容器。

声明如下:

这里写图片描述

因为栈只能从栈顶访问数据,所以栈并没有迭代器,而是以成员方法top()来读取数据,pop(),push()来弹出和插入数据。

下面是各成员方法。要注意的是只有top()方法才会返回数据。pop()方法是直接弹出数据不返回数据的。
这里写图片描述

下面附上一个简单的用例,更多用法会在后面的文章中结合具体的问题来呈现

stack<int> t_stack;

    for(int i=0;i<10;++i)
    {
        t_stack.push(i);    //0 ~9
    }

    cout<<"栈的大小:"<<t_stack.size()<<endl; //栈的大小:10 

    if(!t_stack.empty())
    {

        for(int i=0;i<10;++i)
        {

            cout<<t_stack.top()<<" ";//输出数据  9~0
            t_stack.pop();//弹出数据 
        }

    } 

    cout<<endl<<"栈的大小:"<<t_stack.size()<<endl; //栈的大小:0 

下面来讲讲queue,queue和stack其实是一样的都是由基本容器封装过来的。而且都是默认的使用deque来作为底层数据结构,也可选的使用list,但不建议使用vector来作为底层数据结构,因为vector向前扩展的功能太弱。

queue是单向双口的进出原则符合先进先出,STL中提供了一个back()方法可以让我们访问队尾元素,但是无法从队尾弹出元素。

成员方法如下:
这里写图片描述

测试程序如下:

queue<int> t_queue;

    for(int i=0;i<10;i++)
    {
        t_queue.push(i);//输入 0~9 
    }

    cout<<"队列的大小:"<<t_queue.size()<<endl;//队列的大小:10 

    if(!t_queue.empty())
    {
        for(int i=0;i<10;i++)
        {
            cout<<t_queue.front()<<" ";//输出数据0~9 
            t_queue.pop();//弹出队头数据 
        }

    }

    cout<<endl<<"队列的大小:"<<t_queue.size()<<endl;//队列的大小:0 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值