zoukankan      html  css  js  c++  java
  • STL之queue

    C++ queue用法详解

      只能访问 queue<T> 容器适配器的第一个和最后一个元素。只能在容器的末尾添加新元素,只能从头部移除元素。

          

    1.声明

    queue 的生成方式和 stack 相同,下面展示如何创建一个保存字符串对象的 queue:

      a.std::queue<std::string> words;

    也可以使用拷贝构造函数:

      b.std::queue<std::string> copy_words {words}; // A duplicate of words

    2.操作

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

           和 stack 一样,queue 也没有迭代器。访问元素的唯一方式是遍历容器内容,并移除访问过的每一个元素

     代码:

     1 #include <cstdlib>
     2 #include <iostream>
     3 #include <queue>
     4   
     5 using namespace std;
     6   
     7 int main()
     8 {
     9     int e,n,m;
    10     queue<int> q1;
    11     for(int i=0;i<10;i++)
    12        q1.push(i);
    13     if(!q1.empty())
    14     cout<<"dui lie  bu kong\n";
    15     n=q1.size();
    16     cout<<n<<endl;
    17     m=q1.back();
    18     cout<<m<<endl;
    19     for(int j=0;j<n;j++)
    20     {
    21        e=q1.front();
    22        cout<<e<<" ";
    23        q1.pop();
    24     }
    25     cout<<endl;
    26     if(q1.empty())
    27     cout<<"dui lie  bu kong\n";
    28     system("PAUSE");
    29     return 0;
    30 }
    优先队列(priority queue)
    普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。
    在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。
    优先队列具有最高级先出 (first in, largest out)的行为特征。通常采用堆数据结构来实现。
     在最小优先队列(min priority queue)中,查找操作用来搜索优先权最小的元素,删除操作用来删除该元素;
    对于最大优先队列(max priority queue),查找操作用来搜索优先权最大的元素,删除操作用来删除该元素.
    优先权队列中的元素可以有相同的优先权,查找与删除操作可根据任意优先权进行.

     

    头文件:

    #include <queue>

    1.声明方式:

    a.普通方法:

    priority_queue<int> q;                 //通过操作,按照元素从大到小的顺序出队
     
    priority_queue<int,vector<int>, greater<int> > q;    //通过操作,按照元素从小到大的顺序出队
     

    b.自定义优先级:

    struct cmp {     
      operator bool ()(int x, int y)     
      {        
         return x > y;   // x小的优先级高       //也可以写成其他方式,如: return p[x] > p[y];表示p[i]小的优先级高
      }
    };
    priority_queue<int, vector<int>, cmp> q;    //定义方法
    //其中,第二个参数为容器类型。第三个参数为比较函数。

    c.结构体声明方式:

    struct node {     
      int x, y;     
      friend bool operator < (node a, node b)     
      {         
        return a.x > b.x;    //结构体中,x小的优先级高     
      }
    };
    priority_queue<node>q;   //定义方法
    //在该结构中,y为值, x为优先级。
    //通过自定义operator<操作符来比较元素中的优先级。
    //在重载”<”时,最好不要重载”>”,可能会发生编译错误

    2.基本操作:

    empty()      如果队列为空,则返回真

    pop()    删除对顶元素,删除第一个元素

    push()        加入一个元素

    size()      返回优先队列中拥有的元素个数

    top()     返回优先队列对顶元素,返回优先队列中有最高优先级的元素

    在默认的优先队列中,优先级高的先出队。在默认的int型中先出队的为较大的数。

     
     
    星河滚烫,你是人间理想。
  • 相关阅读:
    手头上的几本关于实现程序设计语言的书
    Ubuntu 16.04 搭建KVM环境
    调用RESTful GET方法
    Ubuntu 16.04 安装Docker
    Ubuntu 16.04安装Java 8
    SecureCRT 多个会话显示在同一窗口
    Ubuntu 16.04 安装Maven3.3.9
    Python标准类型的分类
    Ubuntu 16.04 更改apt源
    LVM术语及相互关系
  • 原文地址:https://www.cnblogs.com/becase/p/11787993.html
Copyright © 2011-2022 走看看