queue是队列容器,是一种“先进先出”的容器。
例如公共电话亭。必须有人出来,下一个才能进入。
如图:
默认情况下queue是利用deque容器实现的一种容器。
它只允许在队列的前端(front)进行删除操作,而在队列的后端(back)进行插入操作。
使用queue需包含头文件#include <queue>
以上笔记来自腾讯课堂骑牛学院!
定义
queue采用模板类实现,queue对象的默认构造形式:queue< T > q1;
queue<int> q1;
queue<double> q2;
queue<char> q3;
// queue定义时默认使用deque作为他的存储对象,
queue<int, deque<int>q1;
// 也可以修改list容器。
queue<int, list<int>> q4;
queue<int> q5 = q1; // 拷贝构造
queue<int> q6;
q6 = q1; // 赋值运算符重载重载
queue<int> q7(q1); // 拷贝构造
注意:不能修改为vector容器。
// 尾部插入
q1.push(1);
// 头部删除
q1.pop();
// 获取队首的值
q1.front();
// 获取队尾的值
q1.back();
// 获取容器中的元素个数
q1.size();
// 判断容器是否为空
q1.empty();
// 交换容器的元素
q1.swap(q2);
注意:queue队列容器没有迭代器,所以,想要输出里面的所有值,唯有以下方法:
while (!q2.empty()) { // 如果不为空则继续执行
cout << q2.front() << " "; // 输出队列头部的值
q2.pop(); // 队列头部出队
}
cout << endl;
测试代码:
#include <iostream>
#include <Windows.h>
#include <queue>
#include <list>
using namespace std;
// 定义
void test1(void) {
queue<int> q1;
queue<double> q2;
queue<char> q3;
// queue定义时默认使用deque作为他的存储对象,
// 也可以修改list容器。注意:不能修改为vector容器。
queue<int, list<int>> q4;
queue<int> q5 = q1;
queue<int> q6;
q6 = q1; // =重载
queue<int> q7(q1); // 拷贝构造
}
// 头部删除与尾部增加
void test2(void) {
queue<int> q1;
// 尾部插入
q1.push(1);
q1.push(2);
q1.push(3);
// 头部删除
q1.pop();
// 获取队首的值
int front = q1.front();
// 获取队尾的值
int back = q1.back();
cout << "队首:" << front << " 队尾:" << back << endl;
// 可以直接修改队首和队尾的值
q1.front() = 111;
q1.back() = 222;
cout << "队首:" << q1.front() << " 队尾:" << q1.back() << endl;
}
// empty 与 size
void test3(void) {
queue<int> q1;
queue<int> q2;
q1.push(1);
q1.push(2);
q1.push(3);
// 获取容器中的元素个数
q1.size();
// 判断容器是否为空
q1.empty();
if (!q1.empty()) {
cout << "容器个数:" << q1.size() << endl;
} else {
cout << "容器为空!" << endl;
}
// 交换容器的元素
q1.swap(q2);
while (!q2.empty()) { // 如果不为空则继续执行
cout << q2.front() << " "; // 输出队列头部的值
q2.pop(); // 队列头部出队
}
cout << endl;
}
int main(void) {
//test1();
//test2();
test3();
system("pause");
return 0;
}
STL其他容器学习链接: