STL源码剖析-Queue

本文详细介绍了队列数据结构的概念,其作为一种先进先出的数据结构,仅允许在最低端加入元素,在最顶端移除元素。文章深入探讨了队列的底层实现,包括使用双端队列(deque)作为基础结构,并提供了具体的类定义和操作方法,如push、pop、front和back。同时,文章指出队列也可利用链表或向量进行底层实现。

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

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、付费专栏及课程。

余额充值