zoukankan      html  css  js  c++  java
  • 初学算法之最基础的stl队列

    简记为先进先出(first in first out)

    它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。

    实用:

    #include <queue>//头文件
    queue<job> a;  //声明 

    声明字符串数组可以用:

    queue<char*>a;
    queue<string>a;
    a.push(t[i]); //初始化队列,插入队尾
    q.front(); //队首元素
    q.back(); //队尾元素
    q.size(); //队列元素个数
    q.pop(); //删除队列第一个元素
    q.empty(); //空返回1,非空返回0

    (我第一次使用队列,在初始化的输入方面遇到了一些问题,如下例1

    例1

    #include<cstdio>
    #include<queue>
    #include<cstring>
    using namespace std;
    char st[111];
    int main()
    {
        queue<char*>myqueue;
        int t,n,s,k;
    
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d %d",&n,&s);
            for(int i=0;i<n;i++)
            {
                memset(st,0,sizeof(st));
                scanf("%s",st);
                myqueue.push(st);
                printf("%s
    ",myqueue.front());
             } 
        
        } 
        return 0;
    }

    如样例所示,每次输入都覆盖了队列的前端(front)

    于是换种写法:

    1.(二维数组)

    2.(string)

    #include<string>
    queue<string>s;  
    s.push(p); cout
    <<s.front()<<endl; //部分代码

    二者的输出相同,皆没有被覆盖。样例如下:

    后来发现是这里出了问题:

    queue<char*>myqueue

    这里的char*指向我所输入的st的首地址,因此myqueue.front()取出的其实是st内的字符串,这就是为什么队列的前段(front)为什么会一直被覆盖。

  • 相关阅读:
    DevExpress中设置PanelControl背景的方法
    ArcEngine选中面要素样式修改
    DEV winform treelist设置背景图像
    React-Native运行知乎日报遇到的问题
    winform程序自动升级
    jquery图片轮播效果(unslider)
    Orchard搜索与索引
    网络版会飞的小鸟
    jQuery event的复制粘贴的坑
    记一次有趣的互联网事件及console.log~
  • 原文地址:https://www.cnblogs.com/zmin/p/6376611.html
Copyright © 2011-2022 走看看