一 queue容器基本概念
Queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口,queue容器允许从一端新增元素,从另一端移除元素。
1.1 queue没有迭代器
Queue所有元素的进出都必须符合”先进先出”的条件,只有queue的顶端元素,才有机会被外界取用。和stack(栈)容器一样,Queue不提供遍历功能,也不提供迭代器。
示例代码:
#include <iostream>
#include<queue>
class num_1{ //类
public:
string name;
int age;
num_1(){}
num_1(string name,int age)
{
this->name = name;
this->age = age;
}
};
int main(void)
{
num_1 p1("a", 1);
num_1 p2("b", 2);
num_1 p3("c", 3);
num_1 p4("d", 4);
queue<num_1> q;
q.push(p1);
q.push(p2);
q.push(p3);
q.push(p4);
cout << "size = " << q.size() << endl;
while(!q.empty()) //判断是否为空
{
cout << "头 :" << q.front().name << " " << q.front().age << endl;
cout << "尾 :" << q.back().name << " " << q.back().age << endl;
cout << endl;
q.pop(); //删头第一个
}
return 0;
}
二 queue常用API
2.1 queue构造函数
底层:
queue<T> queT;//queue采用模板类实现,queue对象的默认构造形式:
queue(const queue &que);//拷贝构造函数
示例代码:
queue<int> q; // queue采用模板类实现,queue对象的默认构造形式:
q.push(1);
q.push(2);
q.push(3);
queue<int> q1(q); // 拷贝构造函数
while(!q.empty())
{
cout << q.front() << endl;
q.pop();
}
2.2 queue存取、插入和删除操作
底层:
push(elem);//往队尾添加元素
pop();//从队头移除第一个元素
back();//返回最后一个元素
front();//返回第一个元素
示例代码:
queue<int> q; // queue采用模板类实现,queue对象的默认构造形式:
q.push(1);
q.push(2); // 往队尾添加元素
q.push(3);
queue<int> q1(q); // 拷贝构造函数
int a = q.back();
int b = q.front();
cout << a << b << endl;
while (!q.empty())
{
cout << q.front() << endl;
q.pop(); // 从队头移除第一个元素
}
注意:在标准的 queue 接口中,你通常只能访问队首元素(front)或向队尾(back)添加新元素,而不能直接访问队尾元素。
然而,C++编程语言中, 提供了一个 方法,允许你查看但不移除队列的最后一个元素。这样的设计是为了提供额外的灵活性,让程序员能够查看即将被插入的元素的位置,即队尾元素。这并不违反队列的基本先进先出原则,因为它仍然保证了元素的添加和移除操作遵循 FIFO 的规则。
2.3 queue赋值操作
底层:
queue& operator=(const queue &que);//重载等号操作符
示例代码:
queue<int> q2;
q2 = q; // 重载等号操作符
2.4 queue大小操作
底层:
empty();//判断队列是否为空
size();//返回队列的大小
示例代码:
queue<int> q; // queue采用模板类实现,queue对象的默认构造形式:
q.push(1);
q.push(2); // 往队尾添加元素
q.push(3);
int a = q.empty();
int b = q.size();