您的位置:首页 > 编程语言 > C语言/C++

C++ STL--queue队列容器学习笔记

2014-01-02 10:19 381 查看
    queue队列也是一个线性存储表,与后进先出的堆栈不同,元素数据在表的一端插入,在另一端进行删除,即构成了先进先出FIFO表。插入的一端成为队尾,删除的一端成为队首。

    由于C++ STL的队列泛化,默认使用的是双端队列deque来实现。

    实际上,我们使用的是queue队列是否为空,取队首元素,取队尾元素,元素入队和元素出队等功能。

    queue队列应用

    创建queue对象

    使用queue队列之前,同stack堆栈一样,需要用构造函数先创建一个空的queue对象,才可使用之后的取队首元素等功能。

    1) queue

    默认的构造函数,创建一个空的queue对象。

    下面的实例代码为使用默认的双端队列为底层容器创建一个空的queue队列对象q,数据元素为int类型。  

queue<int> q;


    2) queue(const queue&)

    复制构造函数,用一个queue对象创建新的queue对象。 

    下面实例代码为利用queue对象q1,创建一个以双向链表为底层容器的queue对象q2

queue<int,list<int>>q2(q1);


    元素入队

    queue队列容器的元素入队函数,同stack堆栈容器一样,也使用push函数。由于C++ STL的queue队列不预设队列的大小,因此同stack容器一样,push函数也就不判断队列空间是否已满,都会试图将元素放入队列,不返回入队是否成功的信息。

    void push(const value_type& x)

    元素入队,将元素x放入队列,成为新的队尾元素。

    下面实例代码为创建queue队列对象q,依次将证书3,4,5,6放入队列,此时的首元素为3。   

queue<int> q;
q.push(3);
q.push(4);
q.push(5);
q.push(6);


    元素出队

    queue队列容器的元素出队函数为pop函数。函数也不判断队列是否为空,都会试图将队首元素删除掉,一般先判断队列不为空,才使用该函数进行元素的出队操作。

    void pop()

    元素出队,删除了队首元素。    

    下面实例代码为先判断队列是否为空,若不为空,使队首元素出队。

while(!q.empty())
{
q.pop();//元素出队(删除队首元素)
}


    取队首、尾元素

    queue队列容器的front函数和back函数,可分别取队首元素和队尾元素。

    下面实例代码为先读取队首元素,然后对队首元素出队

    

while(!q.empty())
{
cout<<q.front()<<end;//读取队首元素
q.pop();
}


    队列非空判断

    同stack堆栈容器一样,此处不再介绍

    队列大小

    队列的元素个数可用size函数获取。如果每次元素入队前,都先检查当前队列的元素个数,以此判断是否允许元素入队,可实现一个具有固定长度的队列。

    size_type size()

    返回队列的当前元素个数

    下面实例代码为先判断队列是否满,未满元素可入队

if(q.size()<QUEUE_SIZE)//队列未满,元素才可入队
{
9e19

q.push(1);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: