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
    请按任意键继续. . .
  • 相关阅读:
    python 安装impala包
    Hive表导出成csv文件
    linux sed命令详解
    Android--Sensor传感器
    Android--ColorMatrix改变图片颜色
    Android--Matrix图片变换处理
    Android--使用Canvas绘图
    Android--从系统Camera和Gallery获取图片优化
    Android--从系统Gallery获取图片
    Android--Tween补间动画
  • 原文地址:https://www.cnblogs.com/xzxl/p/7266370.html
Copyright © 2011-2022 走看看