一、相关定义

原理:queue 队列也是一个线性存储表,元素数据的插入在表的一端进行,在另一端删除,从而构成了一个先进先出FIFO(First In First Out)表。

队头&队尾:插入一端称为队尾,删除一端称为队首。

C++队列是一种容器适配器,默认使用双端队列deque来实现,将 deque 容器转换为 queue 容器。当然,也可以利用其他合适的序列容器作为底层实现queue容器。

队列可以用线性表(list)或双向队列(deque)来实现(注意vector container不能用来实现queue,因为vector 没有成员函数pop_front!):
queue<list<int> > q1;
queue<deque<int> > q2;
其成员函数有“判空(empty)” 、“尺寸(Size)” 、“首元(front)” 、“尾元(backt)” 、“加入队列(push)” 、“弹出队列(pop)”等操作。

C++ STL对queue队列的泛化,是通过模板类型,将默认的deque双端队列类型导入,在内部创建一个序列容器对象,来处理 queue队列的数据存储和操作,包括queue队列是否为空、取队首元素、取队尾元素、元素入队和元素出队等。由于仅需要取队首和队尾元素的操作,因此queue队列容器并不提供任何类型的迭代器。

二、queue模板类

  • queue模板类的定义在<queue>头文件中。
  • queue 模板类也需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque 类型。

定义queue 对象的示例代码如下:
queue<int> q1;
queue<double> q2;

queue 的基本操作有:
入队,如例:q.push(x); 将x 接到队列的末端。
出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
访问队首元素,如例:q.front(),即最早被压入队列的元素。
访问队尾元素,如例:q.back(),即最后被压入队列的元素。
判断队列空,如例:q.empty(),当队列空时,返回true。
访问队列中的元素个数,如例:q.size()

三、代码实现

#include <queue>
int main()
{
queue<int> q;
q.push(4);
q.push(5);
printf("%d\n",q.front());
q.pop();
}
#include <iostream>
#include <queue>
#include <assert.h>
/*
调用的时候要有头文件: #include<stdlib.h> 或 #include<cstdlib> +
#include<queue> #include<queue>
详细用法:
定义一个queue的变量 queue<Type> M
查看是否为空范例 M.empty() 是的话返回1,不是返回0;
从已有元素后面增加元素 M.push()
输出现有元素的个数 M.size()
显示第一个元素 M.front()
显示最后一个元素 M.back()
清除第一个元素 M.pop()
*/
using namespace std; int _tmain(int argc, _TCHAR* argv[])
{
queue <int> myQ; cout<< "现在 queue 是否 empty? "<< myQ.empty() << endl; for(int i =0; i<10 ; i++)
{
myQ.push(i);
}
for(int i=0; i<myQ.size(); i++)
{
printf("myQ.size():%d\n",myQ.size());
cout << myQ.front()<<endl;
myQ.pop();
} system("PAUSE"); return 0;
} 输出结果:
现在 queue 是否 empty? 1
myQ.size():10
0
myQ.size():9
1
myQ.size():8
2
myQ.size():7
3
myQ.size():6
4
请按任意键继续. . .

最新文章

  1. 在一个SQL Server表中的多个列找出最大值
  2. android重复的文件复制APK META-INF许可证错误记录
  3. cocoapods for xcode怎么用
  4. MongoDB实战指南(二):索引与查询优化
  5. C# Winform 实现自定义半透明loading加载遮罩层
  6. 基于Servlet、JSP、JDBC、MySQL登录模块(包括使用的过滤器和配置)
  7. IOS开发中绘制地图线路
  8. Spring.NET 的IOC(依赖注入)
  9. Golang源码探索(三) GC的实现原理
  10. 一篇文章说透Nginx的rewrite模块
  11. windows 无法启动网络发现
  12. pandas 常用函数
  13. SQLserver 还原数据库报“指定转换无效”的错的解决方案
  14. HDU.4035.Maze(期望DP)
  15. Docker 传奇之 dotCloud
  16. jenkins+Gitlab持续集成环境配置教程
  17. Unity2018 Shader Graph 实验室
  18. GPS坐标定位与距离计算
  19. Jacoco+Jenkines小白之路
  20. Java - 关于子类父类的向上转型,向下转型

热门文章

  1. 用HTML写伪类选择器,结构伪类选择器,伪元素选择器样式
  2. LeetCode1.两数之和 JavaScript
  3. html基础用法(下)
  4. SpringBoot非官方教程 | 第十五篇:Springboot整合RabbitMQ
  5. JavaScript监控输入框字数变化,超出限制则禁止输入
  6. Xcode 新建js文件
  7. JSP/Servlet开发——第二章 JSP数据交互(二)
  8. css实现下拉菜单功能(多中实现方式即原理)
  9. 廖老师的Python教程——Python简介
  10. Linux 系统无法登录?你的程序有问题吧!