STL源码剖析-Queue

queue概述

queue是一种先进先出的数据结构,它有两个出口,queue允许新增元素、移除元素、从最低端加入元素、取得最顶端的元素。但除了最低端可以加入,最顶端可以取出,没有任何其他方法可以存取queue的其他元素,queue不允许有遍历行为。
将元素推入queue的操作称为push,将元素推出queue的操作称为pop。
在这里插入图片描述

queue定义完整列表

与stack类似,同样可以采用deque作为底部结构。

queue没有迭代器

//
// Created by Administrator on 2020/4/3.
//

#ifndef MYTINYSTLNEW_QUEUE_H
#define MYTINYSTLNEW_QUEUE_H
#include "Deque.h"
namespace TinySTL{
    template<typename T,typename Sequence = TinySTL::deque<T>>
    class queue{
    private:
        Sequence c;//成员只有一个底部容器
    public:
    typedef typename Sequence::value_type value_type;
    typedef typename Sequence::difference_type difference_type;
    typedef typename Sequence::size_type size_type;
    typedef typename Sequence::reference reference;
    typedef typename Sequence::const_reference const_reference;
    public:
    void push(const value_type& x){c.push_back(x);}
    void pop(){c.pop_front();}
    reference front(){return c.front();}
    //单纯的返回值变成const是不能重载的
    //要把函数变成const才可以重载
    const_reference front()const{return c.front();}
    reference back(){return c.back();}
        //单纯的返回值变成const是不能重载的
        //要把函数变成const才可以重载
    const_reference back()const{return c.back();}
    size_type size(){return c.size();}
    bool empty(){return c.empty();}
    public:
    friend bool operator==(const queue<T,Sequence>& x,const queue<T,Sequence>& y);
    friend bool operator<(const queue<T,Sequence>& x,const queue<T,Sequence>& y);
};
    template<typename T,typename Sequence>
    bool operator==(const queue<T,Sequence>& x,const queue<T,Sequence>& y){
        return x.c == y.c;
    }
    template<typename T,typename Sequence>
    bool operator<(const queue<T,Sequence>& x,const queue<T,Sequence>& y){
        return x.c < y.c;
    }
}


#endif //MYTINYSTLNEW_QUEUE_H

stack和queue除了可以用deque作为底部结构,也可以用list,list也可以满足stack和queue所需要的功能,除此之外,stack还可以使用vector作为底部结构!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值