• 初学算法之最基础的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)为什么会一直被覆盖。

  • 相关阅读:
    逆序数 POJ 2299 Ultra-QuickSort
    DP URAL 1244 Gentlemen
    找规律 SGU 107 987654321 problem
    找规律 SGU 126 Boxes
    DP VK Cup 2012 Qualification Round D. Palindrome pairs
    模拟 Coder-Strike 2014
    模拟 Codeforces Round #203 (Div. 2) C. Bombs
    DFS HDOJ 2614 Beat
    最短路(Floyd_Warshall) POJ 2240 Arbitrage
    最短路(Floyd_Warshall) POJ 1125 Stockbroker Grapevine
  • 原文地址:https://www.cnblogs.com/zmin/p/6376611.html
Copyright © 2020-2023  润新知