一.队列:队列也是一种逻辑数据结构,其具有先进先出的特性,只能在队的前端进行删除, 在队的后端进行插入。针对这种特性,可以实现一些较为复杂的逻辑。在实际应用中,部分程序也正需要这样一种顺序进出的数据处理方式。使用这样的逻辑处理方式,使得我们可以将更多精力放在如何处理顺序逻辑之外的事情,对于编程、开发来讲,提供了极大的方便。
同stack类似,queue也可以看成是容器的容器,内部是使用其它容器来存放具体数据。加了一个外壳,使得我们的数据操作只能是在头或尾。从尾部添加数据,从头部取数据,从而实现FIFO的特性。同stack一样,内部默认数据存放容器为deque,若要用非默认容器初始化,必须要在模板中指定容器类型。
二.queue定义:
需要定义两个参数 :
1.元素类型(必须的)
2.容器类型(不定义的话默认为deque类型容器)
三.栈适配器 STL queue
queue<int,deque> q;
queue<int,list> q;
q.empty()
q.size()
q.front()
q.back()
q.pop()
q.push(item)
四.代码实例
#include <iostream>
#include <queue>
#include <list>
#include <deque>
using namespace std;
int main()
{
queue<int,deque<int>> a;
queue<int, list<int>> b;
//queue<int, vector<int>> c;//vector容器只能单向操作
queue<int> q;
q.push(10);
q.push(5);
q.push(-1);
q.push(20);
cout << "现在队列里有 " << q.size() << " 个数据" << endl;
cout << "队首的数据: " << q.front() << endl;
cout << "队尾的数据: " << q.back() << endl;
q.pop();
cout << "pop以后,新队首的数据: " << q.front() << endl;
while (q.size() != 0)
{
cout << "删除: " << q.front() << endl;
q.pop();
}
if (q.empty())
{
cout << "现在队列是空的!" << endl;
}
return 0;
}