文章目录
- 一、 queue 队列容器简介
- 1、queue 队列容器引入
- 2、queue 队列容器特点
- 二、 queue 队列常用 api 函数
- 1、队尾插入函数 - queue#push 函数
- 2、队头删除函数 - queue#pop 函数
- 3、获取队首元素 - queue#front 函数
一、 queue 队列容器简介
1、queue 队列容器引入
queue 队列容器 是 先进先出 ( FIFO , First In First Out ) 容器 ;
- 该容器只允许在 " 队尾 " 进行插入操作 , 而在 " 队首 " 进行删除操作 ;
- 该容器两边开口 , 一边用于插入元素 ( 不能删除 ) , 一边用于删除元素 ( 不能插入 ) ;
stack 堆栈容器 是 一边开口 , 也就是 栈顶开口 , 栈顶可以 添加 / 删除 元素 , 栈底 不能进行操作 ;
2、queue 队列容器特点
queue 队列容器 的 插入 / 删除 元素操作 时间复杂度是 O(1) ;
queue 队列容器 提供的 api 成员函数 与 stack 堆栈容器 类似 , 只提供有限的成员函数 , 如 :
- queue#push 函数 : 队尾 插入元素 ;
- queue#pop 函数 : 队首 删除元素 ;
- queue#front 函数 : 查看 队首元素 ;
使用 queue 容器之前 , 需要导入 <queue> 头文件 ;
#include <queue>
二、 queue 队列常用 api 函数
1、队尾插入函数 - queue#push 函数
调用 queue 容器的 push 函数 可以 在队尾插入一个元素 ;
queue#push 函数原型如下 :
void push(const value_type& val);
queue#push 函数 接受一个常量引用参数 val , 将 val 元素插入队列的尾部 , 并触发底层容器的相应操作 , 如 : 分配内存等 ;
queue 容器 的元素插入删除位置限定 :
- 队尾 只能插入元素 , 不能删除元素 ;
- 队头 只能插入元素 , 不能删除元素 ;
- 队列中部 既不能插入元素 , 也不能删除元素 ;
代码示例 :
#include "iostream"
using namespace std;
#include "queue"
int main() {
std::queue<int> q;
// 队尾入队操作
q.push(10);
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
};
执行结果 :
2、队头删除函数 - queue#pop 函数
调用 queue 队列容器的 pop 函数 , 可以删除 队头的元素 ;
queue#pop 函数原型如下 :
void pop();
queue#pop 函数 没有 参数 和 返回值 , 直接将 队首元素 直接删除 , 也无法获取到队首元素 ;
使用 queue#pop 函数 删除队首元素前 , 先检查 queue 队列是否为空 , 如果为空 , 强行删除队首元素会导致程序崩溃 ;
queue 容器 的元素插入删除位置限定 :
- 队尾 只能插入元素 , 不能删除元素 ;
- 队头 只能插入元素 , 不能删除元素 ;
- 队列中部 既不能插入元素 , 也不能删除元素 ;
代码示例 :
#include "iostream"
using namespace std;
#include "queue"
int main() {
std::queue<int> q;
// 删除队首元素
// 如果 queue 为空, 程序崩溃
//q.pop();
// 队尾插入元素
q.push(10);
// 删除队首元素
q.pop();
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
};
执行结果 :
空的 queue 队列 删除队首元素 , 会导致如下运行时异常崩溃 ;
3、获取队首元素 - queue#front 函数
调用 queue 队列的 front 函数 , 可以获取队首元素 , 该元素不会再队列中被删除 , 只是将值读取出来 ;
queue#front 函数原型 :
const_reference front() const;
queue#front 函数 没有参数 , 返回值是一个常量引用 , 表示读取的队列的头部元素 ;
如果 queue 队列为空 , 调用 front 函数会导致未定义行为 , 程序直接崩溃 ; 在使用 front 函数之前 , 通常需要先检查队列是否为空 , 可以使用 empty 函数来实现 ;
代码示例 :
#include "iostream"
using namespace std;
#include "queue"
int main() {
std::queue<int> q;
// 删除队首元素
// 如果 queue 为空, 程序崩溃
//q.pop();
// 获取队首元素
// 如果 queue 为空, 程序崩溃
//q.front();
// 队尾插入元素
q.push(1);
q.push(2);
// 打印队首元素
cout << "队首元素 : " << q.front() << endl;
// 删除队首元素
q.pop();
// 打印队首元素
cout << "队首元素 : " << q.front() << endl;
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
};
执行结果 :
如果 queue 队列为空 , 会导致如下崩溃问题 :