C++ std::queue 与 priority_queue 核心用法详解

沈亦白
沈亦白
发布时间:2026-10-13| 4人浏览过
原创

C++ STL 提供了功能强大的队列容器,其中 std::queue 遵循先进先出原则,而 priority_queue 按优先级自动排序。本文详细解析这两类队列的头文件依赖、核心 API(入队、出队、读取首尾元素等)及其代码实现,通过实例对比展示它们的特性差异。

核心概念与准备条件

在使用 C++ 队列之前,必须包含标准库头文件 <queue>。C++ 中主要涉及两种队列类型:

  • std::queue:普通队列,遵循 FIFO(First In First Out)原则,即先进先出。
  • std::priority_queue:优先队列,默认情况下按元素的降序排列(优先级高的元素排在前面),实际上是一个基于堆的结构。

普通队列 std::queue 用法演示

普通队列的操作非常直观,常用于模拟排队场景或作为 BFS(广度优先搜索)的数据结构基础。

第1步:定义与初始化

使用 queue<Type> 语法声明队列对象。例如创建一个存储整数的队列:queue<int> myQueue;

第2步:执行入队操作 (push)

使用 .push(value) 方法将元素添加到队尾。此操作会将新元素置于队列的最末端,等待处理。

第3步:查看与判断状态

在删除元素前,通常需要检查队列状态。使用 .size() 获取当前元素数量,.empty() 判断是否为空(返回布尔值)。若需查看即将处理的元素,使用 .front() 获取队首元素,或 .back() 获取队尾最新加入的元素。

第4步:执行出队操作 (pop)

使用 .pop() 移除队首元素。**注意**:该函数不返回被删除的值,仅从队列中移除。因此必须先通过 .front() 保存或删除前需确认有数据。

/*
 队列使用时必须包含头文件 #include <queue> 有以下几种方法
 入队push(),出队pop(), 读取队首元素front(),读取队尾元素back() ,
 判断队是否有元素empty()
 求队列元素个数size() 
*/
#include <iostream>
#include <queue>
using namespace std;
int main()
{
  queue<int> one;
  one.push(1);
  one.push(2);
  one.push(3);
  cout<<"one 队列长度:"<<one.size()<<endl;
  cout<<"队尾元素是:"<<one.back()<<endl;
  cout<<"队头元素是:"<<one.front()<<endl; 
  cout<<"队列是否为空(1为空,0为非空):"<<one.empty()<<endl;
  one.pop(); //删除是从队头元素开始的 
  cout<<one.front()<<endl;
  cout<<one.size()<<endl;
  //cout<<one.top()<<endl; //普通队列好像没有次方法 
}

优先队列 priority_queue 用法演示

优先队列不同于普通队列,它会自动将最高优先级的元素置于顶端。默认情况下,对于整数类型,数值越大优先级越高(大顶堆)。

第1步:定义优先队列

语法与普通队列类似:priority_queue<Type> pq;。需要注意的是,虽然其底层也是队列结构,但接口有所不同,特别是获取顶部元素的方式。

第2步:入队与顶部访问

入队同样使用 .push(),但加入后队列内部会重新排序以维持优先级。获取“队首”(即最高优先级元素)时,不使用 front(),而是使用 top()。这是与普通队列最大的区别之一。

//优先队列的使用 优先队列中使用back、front 出现错误 
priority_queue<int> three;
three.push(10);
three.push(20);
three.push(30);
cout<<"three 优先队列长度:"<<three.size()<<endl;  
cout<<"队列是否为空(1为空,0为非空):"<<three.empty()<<endl;
while (false == three.empty())
{
   cout<<three.top()<<endl;
   three.pop();
}

关键差异与注意事项

在实际开发中区分两者至关重要,以下是常见易错点:

  • 获取顶部元素:普通队列用 front(),优先队列用 top()。普通队列没有 top() 方法。
  • 遍历顺序:普通队列按插入顺序依次输出;优先队列按优先级降序输出(除非自定义比较器改为升序)。
  • 安全性:调用 front()、back() 或 top() 前务必确保队列不为空(使用 !empty() 检查),否则会导致未定义行为或程序崩溃。

简要总结

掌握 std::queue 的基础操作可实现高效的 FIFO 处理逻辑,而理解 priority_queue 的自动排序机制则适用于任务调度等场景。正确使用 .push, .pop, .front/.top, .size, .empty 等方法即可灵活驾驭这两种数据结构。

以上就是C++队列std::queue与priority_queue核心用法的详细内容,更多关于C++队列技巧的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。