1.
queue是一种先进先出的数据结构,它只允许从一端插入元素,从另一端弹出元素,这两个过程被称为入队和出队,就像我们到火车站卖票窗口买票一样,只能排在队伍后面,队伍最前面的人买了从队伍最前面离开,新来买票的只能排在队伍最后面直到前面的人都离开了队伍才能轮到他。所以queue容器总结有以下特征:
- queue容器只允许从一端新增元素,从另外一端移除元素。
- queue中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为。
- 队列中进数据叫入队push()。
- 队列中出数据叫出队pop()。
- 判断队列是否为空empty()。
queue的构造函数:
第一种是默认构造
queue <T> q;
第二种是拷贝构造
queue <T> q(const queue &tmp);
赋值操作
queue& operator=(const queue &tmp);
常用到的方法:
push //向队尾插入元素,入队
pop //从对头弹出元素,出队
back //返回队尾元素
front //返回队头元素
empty //判断队列是否为空 1:空 0:不为空
size //返回队列大小
代码例子:
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
class Person{
public:
Person(const string &nam,int ag);
string name;
int age;
};
Person::Person(const string &nam,int ag)
{
this->name = nam;
this->age = ag;
}
void test01(void)
{
queue<Person> q;
Person p1("唐僧",30);
Person p2("八戒",30);
Person p3("沙僧",30);
Person p4("悟空",30);
q.push(p1);
q.push(p2);
q.push(p3);
q.push(p4);
cout << "q queue size:" << q.size()<<endl;
queue <Person> q2(q);
cout << "q2 queue size:" << q2.size()<<endl;
queue <Person> q3 = q;
cout << "q3 queue size:" << q3.size()<<endl;
cout << "q: --------------------------------------------------------------------"<<endl;
while(!q.empty())
{
cout << "queue head:" << q.front().name << " " << q.front().age << endl;
cout << "queue tail:" << q.back().name << " " << q.back().age << endl;
q.pop();//
}
cout << "q queue size:" << q.size()<<endl;
cout << "q2: -------------------------------------------------------------------"<<endl;
while(!q2.empty())
{
cout << "queue head:" << q2.front().name << " " << q2.front().age << endl;
cout << "queue tail:" << q2.back().name << " " << q2.back().age << endl;
q2.pop();//
}
cout << "q2 queue size:" << q2.size()<<endl;
cout << "q3: --------------------------------------------------------------------"<<endl;
while(!q3.empty())
{
cout << "queue head:" << q3.front().name << " " << q3.front().age << endl;
cout << "queue tail:" << q3.back().name << " " << q3.back().age << endl;
q3.pop();//
}
cout << "q3 queue size:" << q3.size()<<endl;
}
int main(void)
{
test01();
return 0;
}