【C++STL详解(八)】--------stack和queue的模拟实现

目录

前言

一、stack模拟实现

二、queue的模拟实现


前言

前面也介绍了stack和queue的常见接口,我们也知道stack和queue实际上是一种容器适配器,它们只不过是对底层容器的接口进行封装而已,所以模拟实现起来比较简单!一起来看看是怎么个事!额……其实也就那么回事!(hhh)

一、stack模拟实现

复习一下常见接口:

empty()判断栈是否为空
size()返回栈的元素个数
top()返回栈顶元素的引用
push()将元素压入栈
pop()栈顶元素出栈

这里直接上代码:

#include <deque>
#include <iostream>
using namespace std;
namespace st
{
    template<class T, class Con = deque<T>>//给半缺省,因为栈有链栈和数字栈
    class stack
    {
    public:
        void push(const T& x)
        {
            _c.push_back(x);
        }
        void pop()
        {
            _c.pop_back();
        }
        T& top()
        {
            return _c.back();
        }
        const T& top()const
        {
            return _c.back();
        }
        size_t size()const  //对于这种无需改变的最好加上const
        {
            return _c.size();
        }
        bool empty()const
        {
            return _c.empty();
        }
    private:
        Con _c;
    };
};

可能会有一个疑问,为什么它不写构造函数呢?其实前面已经讲过,stack在STL库里不把它看作容器,而是一种适配器,它的成员变量实际就是对于容器所实例化出来的对象,也算是一种自定义类型,对于自定义类型,会自动去调用对于的类型去完成构造!(queue同理!)

二、queue的模拟实现

复习一下常用接口:

empty()判断队列是否为空,bool类型
size()返回有效数据个数
front()返回队头元素的引用
back()返回队尾元素的引用
push()入队列
pop()出队列

同样也是直接上代码:

#include<deque>
#include<iostream>

using namespace std;

namespace qu
{
    template<class T, class Con = deque<T>>//ȱʡ
    class queue
    {
    public:
        void push(const T& x)
        {
            _c.push_back(x);
        }
        void pop()
        {
            _c.pop_front();
        }

        T& back()
        {
            return _c.back();
        }
        const T& back()const
        {
            return _c.back();

        }

        T& front()
        {
            return _c.front();
        }
        const T& front()const
        {
            return _c.front();
        }

        size_t size()const
        {
           return _c.size();
        }
        bool empty()const
        {
            return _c.empty();
        }
    private:
        Con _c;
    };
};

再一次不难看出,两个的模拟实现都是在用其他容器的接口来封装自己,就能够转化得到为我们所需要的东西!这也算是属于适配器的一大特点!不费吹灰之力就能得到所需~

好了,今天的分享就到这里!如有不足,欢迎评论,如还可以,持续关注!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值