定义于头文件 <queue> | ||
template< class T, > class queue; | ||
std::queue 类是容器适配器,它给予程序员队列的功能——尤其是 FIFO (先进先出)数据结构。
类模板表现为底层容器的包装器——只提供特定的函数集合。 queue 在底层容器尾端推入元素,从首端弹出元素。
模板形参
T | - | 存储的元素类型。若 T 与 Container::value_type 不是同一类型则行为未定义。 (C++17 起) |
Container | - | 用于存储元素的底层容器。容器必须满足序列容器 (SequenceContainer) 的要求。另外,它必须提供带通常语义的下列函数:
标准容器 std::deque 和 std::list 满足这些要求。 |
queue是一种先进先出的数据结构,它只允许从一端插入元素,从另一端弹出元素,这两个过程被称为入队和出队,就像我们到火车站卖票窗口买票一样,只能排在队伍后面,队伍最前面的人买了从队伍最前面离开,新来买票的只能排在队伍最后面直到前面的人都离开了队伍才能轮到他。所以queue容器总结有以下特征:
(1)queue容器只允许从一端新增元素,从另外一端移除元素。
(2)queue中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为。
(3)队列中进数据叫入队push()。
(4)队列中出数据叫出队pop()。
(5)判断队列是否为空empty()。
简单举例:
#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("八戒",50);
Person p3("沙僧",40);
Person p4("悟空",60);
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(int argc, char *argv[])
{
test01();
return 0;
}