• queue源码


    queue概述

    queue是一种先进先出的数据结构,允许新增元素、移除元素,queue只允许从底端加入元素,从顶端移除元素,不允许有遍历行为。

    queue定义

    以某种既有容器作为底部结构,将其接口改变,使之符合"先进先出"的特性,形成一个queue,是很容易做到的,deque是双向开口的数据结构,若以deque以底端的出口以及前端的入口,便轻易举起形成一个queue。

    由于queue系以底部容器完成其所有工作,而具有这种性质,称为adapter(配接器),因此,STL stack往往不被归类为container(容器),而被归类为container adapter。

    template <class T,class Sequence=deque<T> >
    class queue
    {
        friend bool operator==__STL_NULL_TMPL_ARGS(const queue& x,const queue& y);
        friend bool operator<__STL_NULL_TMPL_ARGS(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(也就是deque)实现queue
        bool empty() const{return c.empty();}
        size_type size() const{return c.size();}
        reference front() const{return c.font();}
        const_reference front() const{return c.font();}
        reference back() const{return c.back();}
        const_reference back() const{return c.back();}
        
        void push(const value_type&){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){
        return 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;
    }

    queue没有迭代器

    queue是先进先出的数据结构,不允许遍历,所以queue不提供迭代器。

    以list作为queue底层容器

    除了deque之外,list也是双向开口的数据结构。上述queue源码中使用的底层容器的函数有empty、size、back、push_back、pop_back,list也都具备,因此,若以list为底部结构并封闭其头端开口,一样能够形成一个stack,示范如下:

    #include<bits/stdc++.h>
    using namespace std;
    
    int main(){
        queue<int,list<int> > myqueue;
        myqueue.push(1);
        myqueue.push(3);
        myqueue.push(5);
        myqueue.push(7);
        cout<<myqueue.size()<<endl; //4
        cout<<myqueue.front()<<endl; //1;
        myqueue.pop(); cout<<myqueue.front()<<endl; //3
        myqueue.pop(); cout<<myqueue.front()<<endl; //5
        myqueue.pop(); cout<<myqueue.front()<<endl; //7
        cout<<myqueue.size()<<endl; //1
        return 0;
    }
  • 相关阅读:
    rs485
    RS-232
    Delphi CRC算法, 不错
    Delphi Modbus RTU CRC16校验码
    如何使用Delphi编写Modbus RTU CRC16的校验码
    Delphi CRC算法crcexecute
    Delphi CRC32Verify控件
    Delphi CRC16校验算法实现(转)
    delphi crc校验函数
    JavaScript如何一次性展示几万条数据
  • 原文地址:https://www.cnblogs.com/ybf-yyj/p/10304268.html
Copyright © 2020-2023  润新知