zoukankan      html  css  js  c++  java
  • C++STL——队列

    一、相关定义

    原理:queue 队列也是一个线性存储表,元素数据的插入在表的一端进行,在另一端删除,从而构成了一个先进先出FIFO(First In First Out)表。

    队头&队尾:插入一端称为队尾,删除一端称为队首。

    C++队列是一种容器适配器,默认使用双端队列deque来实现,将 deque 容器转换为 queue 容器。当然,也可以利用其他合适的序列容器作为底层实现queue容器。

    队列可以用线性表(list)或双向队列(deque)来实现(注意vector container不能用来实现queue,因为vector 没有成员函数pop_front!):
    queue<list<int> > q1;
    queue<deque<int> > q2;
    其成员函数有“判空(empty)” 、“尺寸(Size)” 、“首元(front)” 、“尾元(backt)” 、“加入队列(push)” 、“弹出队列(pop)”等操作。

    C++ STL对queue队列的泛化,是通过模板类型,将默认的deque双端队列类型导入,在内部创建一个序列容器对象,来处理 queue队列的数据存储和操作,包括queue队列是否为空、取队首元素、取队尾元素、元素入队和元素出队等。由于仅需要取队首和队尾元素的操作,因此queue队列容器并不提供任何类型的迭代器

    二、queue模板类

    • queue模板类的定义在<queue>头文件中。
    • queue 模板类也需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque 类型。

    定义queue 对象的示例代码如下:
    queue<int> q1;
    queue<double> q2;

    queue 的基本操作有:
    入队,如例:q.push(x); 将x 接到队列的末端。
    出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
    访问队首元素,如例:q.front(),即最早被压入队列的元素。
    访问队尾元素,如例:q.back(),即最后被压入队列的元素。
    判断队列空,如例:q.empty(),当队列空时,返回true。
    访问队列中的元素个数,如例:q.size()

    三、代码实现

    #include <queue> 
    int main()
    {
    	queue<int> q;
        q.push(4);
        q.push(5);
        printf("%d
    ",q.front());
        q.pop();
    }
    
    #include <iostream>
    #include <queue>
    #include <assert.h>
    /*
    调用的时候要有头文件: #include<stdlib.h> 或 #include<cstdlib> +
    #include<queue>       #include<queue>
    详细用法:
    定义一个queue的变量     queue<Type> M
    查看是否为空范例        M.empty()    是的话返回1,不是返回0;
    从已有元素后面增加元素   M.push()
    输出现有元素的个数      M.size()
    显示第一个元素          M.front()
    显示最后一个元素        M.back()
    清除第一个元素          M.pop()
    */
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    queue <int> myQ;
    
    cout<< "现在 queue 是否 empty? "<< myQ.empty() << endl; 
    
    for(int i =0; i<10 ; i++)
    {
    myQ.push(i);
    }
    for(int i=0; i<myQ.size(); i++)
    {
    printf("myQ.size():%d
    ",myQ.size());
    cout << myQ.front()<<endl;
    myQ.pop();
    }
    
    system("PAUSE"); 
    
    return 0;
    }
    
    输出结果:
    现在 queue 是否 empty? 1
    myQ.size():10
    0
    myQ.size():9
    1
    myQ.size():8
    2
    myQ.size():7
    3
    myQ.size():6
    4
    请按任意键继续. . .
  • 相关阅读:
    桟错误分析方法
    gstreamer调试命令
    sqlite的事务和锁,很透彻的讲解 【转】
    严重: Exception starting filter struts2 java.lang.NullPointerException (转载)
    eclipse 快捷键
    POJ 1099 Square Ice
    HDU 1013 Digital Roots
    HDU 1087 Super Jumping! Jumping! Jumping!(动态规划)
    HDU 1159 Common Subsequence
    HDU 1069 Monkey and Banana(动态规划)
  • 原文地址:https://www.cnblogs.com/xzxl/p/7266370.html
Copyright © 2011-2022 走看看