9.queue

代码位置:https://github.com/liangleilei123/My_STL/tree/main/Code/include

概述

queue是先进先出的数据结构。和stack的实现原理相同,都是通过底层容器实现的。底层容器默认是deque,也可以是list

queue的全部源码

template<class T, class Sequence = deque<T>>
class queue {
    friend bool operator==(const queue &x, const queue &y);

    friend bool operator<(const queue &x, const queue &y);

public:
    typedef typename Sequence::value_type value_type;
    typedef typename Sequence::size_type size_type;
    typedef typename Sequence::reference reference;
    typedef typename Sequence::const_reference const_reference;

protected:
    Sequence c;

public:
    //以下完全利用Sequence c的操作,完成stack的操作
    bool empty() const { return c.empty(); }

    size_type size() const { return c.size(); }

    reference front() { return c.front(); }

    reference back() { return c.back(); }

    const_reference back() const { return c.back(); }

    //stack()是后进先出
    void push(const value_type &x) { c.push_back(x); }

    void pop() { c.pop_front(); }
};

template<class T, class Sequence>
bool operator==(const queue<T, Sequence> &x, const queue<T, Sequence> &y) {
    x.c == y.c;
}

template<class T, class Sequence>
bool operator<(const queue<T, Sequence> &x, const queue<T, Sequence> &y) {
    return x.c < y.c;
}

测试代码:

#include "my_list.h"
#include "my_queue.h"
#include "iostream"

template<class T = int>
void print_value(T x) {
    std::cout << x << std::endl;
}

int main() {
    //mystl::queue<int, mystl::list<int>> q;       //使用list为底层容器
    mystl::queue<int> q;                           //默认使用deque为底层容器
    q.push(1);
    q.push(3);
    q.push(5);
    q.push(7);

    print_value(q.size());         //4
    print_value(q.front());          //1

    q.pop();
    print_value(q.front());          //3
    q.pop();
    print_value(q.front());          //5
    q.pop();
    print_value(q.front());          //7
    print_value(q.size());         //1

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值