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

 

posted @ 2017-02-08 09:01  euzmin  阅读(153)  评论(0编辑  收藏  举报