STL__queue_的应用
转:http://hi.baidu.com/xiaotiandm/item/bda34511cf9e99098fbde41a
调用的时候要有头文件: #include<stdlib.h> 或 #include<cstdlib> + #include<queue>
详细用法:
定义一个queue的变量 queue<Type> que
查看是否为空范例 que.empty() 是的话返回1,不是返回0;
从已有元素后面增加元素(入队) que.push()
现有元素的个数 que.size()
显示第一个元素 que.front()
显示最后一个元素 que.back()
清除第一个元素 (出队) que.pop()
看一个例子:
#include <cstdlib>
#include <iostream>
#include <queue>
using namespace std;
int main()
{
queue<int> myQ;
cout<< "现在 queue 是否 empty? "<< myQ.empty() << endl;
cout << "push 5, push 6, push 7" << endl;
myQ.push(5);
myQ.push(6);
myQ.push(7);
cout << "现在 queue 的元素有几个? " << myQ.size() << endl;
cout << "现在 queue 的front为何? " << myQ.front() << endl;
cout << "现在 queue 的rear为何? " << myQ.back() << endl;
cout << "pop" << endl; myQ.pop();
cout << "现在 queue 的元素有几个? " << myQ.size() << endl;
cout << "现在 queue 的front为何? " << myQ.front() << endl;
cout << "现在 queue 的rear为何? " << myQ.back() << endl;
system("PAUSE");
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()返回队列的当前元素的个数
(9)、如何实现固定大小的queue队列
在每一次元素入队列前都判断当前的队列是否满,用双向链表做queue 的底层容器可以实现
例如:
#include<iostream>
#include<list>
#include<queue>
using namespace std;
#define QUEUE_SIZE 50 //固定大小;
int main()
{
queue<int,list<int>> q;
if(q.size(QUEUE_SIZE) )
q.push(51);
if(q.size(QUEUE_SIZE) )
q.push(36);
if(q.size(QUEUE_SIZE))
q.push(28);
while(!q.empty() )
{
cout<<q.front()<<endl;
q.pop();
}
return 0;
}
#include<iostream>
#include<cstdio>
#include<queue>
#include<stdlib>
using namespace std;
int main()
{
register int i,j;
int m,n;
char c[6];
int x,y;
while(scanf("%d %d",&n,&m)!=EOF)
{
queue<int> Q[10000];
for(i=1;i<m;i++)
{
scanf("%s",&c);
if(strcmp(c,"INT") == 0)
{
for(j=1;j<=n;j++)
{
while(!Q[j].empty())
{
Q[j].pop();
}
continue;
}
}
if(strcmp(c,"PUSH")==0)
{
scanf("%d %d",&x,&y);
Q[x].push(y);
continue;
}
if(strcmp(c,"POP")==0)
{
scanf("%d ",&y);
if(Q[y].empty)
{
printf("NULL\n");continue;
}
else
{
printf("%d\n",Q[y].front());
}
Q[y].pop;
}
}
}
return 0;
}
STL__queue_的应用的更多相关文章
- HDOJ1728 BFS【STL__queue_的应用】
STL__queue_的应用 调用的时候要有头文件: #include<stdlib.h> 或 #include<cstdlib> + #include<queue> ...
随机推荐
- ASIHTTPRequest-插件的使用
链接地址:http://blog.sina.com.cn/s/blog_7b9d64af0101e5uf.html 一.什么是ASIHTTPRequest ASIHTTPRequest 插件是一个 ...
- BZOJ 1592: [Usaco2008 Feb]Making the Grade 路面修整( dp )
最优的做法最后路面的高度一定是原来某一路面的高度. dp(x, t) = min{ dp(x - 1, k) } + | H[x] - h(t) | ( 1 <= k <= t ) 表示前 ...
- android保存文件到SD卡中
想把文件保存到SD卡中,一定要知道SD卡的路径,有人说可以用File explore来查看,这种方法不太好,因为随着android版本的升级,SD卡的路径可能会发生改变.在1.6的时候SD的路径是/s ...
- 【HTTP】Fiddler(二) - 使用Fiddler做抓包分析
上文( http://blog.csdn.net/ohmygirl/article/details/17846199 )中已经介绍了Fiddler的原理和软件界面.本文主要针对Fiddler的抓包处理 ...
- 实现文件下载的java代码
实现文件下载的java代码 //这是实现下载类(servlet),详细思路代码例如以下://也可连接数据库package com.message; import javax.servlet.*;imp ...
- Swift - 给游戏添加背景音乐和音效(SpriteKit游戏开发)
游戏少不了背景音乐和音效.下面我们通过创建一个管理音效的类,来实现背景音乐的播放,同时点击屏幕可以播放相应的音效. 声音管理类 SoundManager.swift 1 2 3 4 5 6 7 8 9 ...
- 自定义NavgationBa返回按钮
iOS 上UINavigationController视图压栈形式,可以在当前视图无限制push许多视图,然而一些会觉得自带的push按钮不够美观,而且当上的上一个页面title很长的时候,那个返回 ...
- JavaScript闭包(closure)入门: 拿"开发部"和"技术牛"举个例子
虽然只是一小段菜鸟的学习笔记 , 不过还是希望看到的高手看到不足的时候帮忙指点~ 一:代码和执行过程 /** * http://blog.csdn.net/ruantao1989 * ==>Ju ...
- Lucene.Net 2.3.1开发介绍 —— 二、分词(五)
原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(五) 2.1.3 二元分词 上一节通过变换查询表达式满足了需求,但是在实际应用中,如果那样查询,会出现另外一个问题,因为,那样搜索,是只 ...
- perl lwp 默认的请求头
</pre><pre name="code" class="html">[root@dr-mysql01 ~]# cat getx.pl ...