码迷,mamicode.com
首页 > 其他好文 > 详细

150723培训心得(queue)

时间:2015-07-24 20:59:56      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:

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;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

150723培训心得(queue)

标签:

原文地址:http://blog.csdn.net/wangluoershixiong/article/details/47044929

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!