您的位置:首页 > 产品设计 > UI/UE

150723培训心得(queue)

2015-07-24 18:05 525 查看
queue(STL中函数,就是指队列)

#include <iostream>

#include <queue>

using namespace std; //这几个头文件必不可少

int main()

{

queue<类型(如int)> q; //使用前需定义一个queue变量,且定义时已经初始化

while(!q.empty()) q.pop(); //重复使用时,用这个初始化(空则返回1,不空返回0)

q.push(1); //进队列

q.pop(); //出队列

int v=q.front(); //得到队首的值

int s=q.size(); //得到队列里元素个数

return 0;

}

其它概述:

使用queue之前,要先利用构造函数一个队列对象,才可以进行元素的入队,出队,取队首和队尾等操作;

(1)queue() queue<int>q; 或者 queue<int>Q[10000];

(2)queue(const queue&) 复制构造函数

例如:用一行代码利用queue对象q1,创建一个以双向链表为底层容器的queue对象q2

queue<int,list<int>>q1;queue<int,list<int>>q2(q1);

(3)元素入队 函数为:push()例如:q.push(3),意思是将3入队 ,注意队列的大小不预设

(4)元素出队 函数为:pop()例如:q.pop()

(5)取对头元素 函数为:front()

(6)取队尾元素 函数为:back()

(7)判断对空 函数为:empty()

(8)队列的大小 函数为:size()返回队列的当前元素的个数

代码:

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<queue>
using namespace std;
int sta[110000];
int map[110000][3];
int ans[110000];
int main()
{
int m;
int n,s;
int i,j,k;
int now;
queue<int>q;//定义int型队列q
scanf("%d",&m);
while(m--)
{
scanf("%d%d",&n,&s);
q.push(s);//将s入队
for(i=1;i<n;i++)
{
map[i][0]=1;
scanf("%d%d",&map[i][1],&map[i][2]);
}
memset(ans,0,sizeof(ans));
ans[s]=-1;
while(!q.empty())//q.empty()判断是否队空,空则返回1,不空则返回0
{
now=q.front();//取队首数据
q.pop();//出队
for(i=1;i<n;i++)
{
if(map[i][0]&&map[i][1]==now)
{
q.push(map[i][2]);
ans[map[i][2]]=now;
map[i][0]=0;
}
else if(map[i][0]&&map[i][2]==now)
{
q.push(map[i][1]);
ans[map[i][1]]=now;
map[i][0]=0;
}
}
}
for(i=1;i<=n;i++)
{
printf("%d",ans[i]);
if(i!=n)
printf(" ");
else
printf("\n");
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: