一、相关定义
原理: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 请按任意键继续. . .