CPP的Queue模拟实现

CPP的Queue模拟实现

Queue的概念

​ 列可以想象成一种特殊的栈,我们在前面提到,栈遵循的原则是后进先出,列遵循的原则则是先进先出。列只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列。进行插入操作的一端称为队尾。出队列:进行删除操作的一端称为队头。

​ 底层容器可以是标准容器类模板之一, 也可以是其他的容器, 但是实现出来的Queue最少应该实现以下操作:

  • empty: 是否为空
  • size: 返回有效个数元素
  • front: 返回队头元素的引用
  • back: 返回队尾元素的引用
  • push_back: 在队尾入队列
  • pop_front: 在对头出队列

在这里插入图片描述

Queue的使用

​ 这里用一道OJ题来快速熟悉队列的思想, 剑指 Offer 10- I. 斐波那契数列.

​ 虽然这道题目并没有实际使用到CPP的队列, 但是用到了队列的思想, 题解如下:

class Solution {
public:
    int fib(int n) {
        int left = 0;
        int mid = 1;
        int right = 1;
        while(n--)
        {
            left = mid % 1000000007;
            mid = right % 1000000007;
            right = (mid + left) % 1000000007;
        }
        
        return left;
    }
};

​ 接着来看CPlusPlus网站对于Queue的部分函数介绍:

函数声明接口说明
queue构造queue
empty判断queue是否为空
size返回有效个数元素
front返回队头元素的引用
back返回队尾元素的引用
push在队尾入队列
emplace替换
pop在对头出队列

Queue的实现

​ 这里为了简单, 底层容器使用vector.

#include <iostream>
#include <vector>


namespace pc
{
    template<class T>
    class queue
    {
    public:
        void push(const T& data)
        {
            data_.push_back(data);
        }
        void pop()
        {
            if(!data_.empty())
            {
                data_.erase(data_.begin());
            }
        }
        bool empty() const
        {
            return data_.empty();
        }
        size_t size() const
        {
            return data_.size();
        }
        T& front()
        {
            return data_.front();
        }
        T& back()
        {
            return data_.back();
        }
        void display()
        {
            for(auto& x : data_)
            {
                std::cout << x << " ";
            }
            std::cout << std::endl;
        }

    private:
        std::vector<T> data_;
    };
};



#include "queue.hpp"




int main()
{

    pc::queue<int> queue;
    queue.push(1);
    queue.push(2);
    queue.push(3);
    queue.push(4);
    queue.push(5);
    queue.push(6);
    queue.push(7);
    queue.display();
    queue.pop();
    queue.pop();
    queue.pop();
    queue.pop();

    queue.display();
    std::cout << queue.size() << std::endl;
    std::cout << queue.empty() << std::endl;

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

roseisbule

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值