跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

队列的数组模拟与 STL queue 实战详解

队列作为先进先出(FIFO)的线性表,在算法中应用广泛。通过数组模拟和 C++ STL 两种方式深入解析队列操作,涵盖入队、出队、获取头尾元素及判空等核心接口。对比手动实现与标准库用法,帮助读者理解底层原理并掌握高效编码技巧。

宁静发布于 2026/3/26更新于 2026/10/681 浏览
队列的数组模拟与 STL queue 实战详解

队列基础概念

队列是一种访问受限的线性表,只允许在一端插入(队尾),另一端删除(队头)。遵循先进先出 (FIFO) 原则。

队列的手动模拟实现

使用数组模拟队列时,我们需要维护两个指针:h 指向队头元素的前一个位置,t 指向队尾元素的位置。这种左开右闭 [h, t] 的设计能简化边界判断,实际开发中只要逻辑自洽即可。

初始化

const int N = 1e6 + 10;
int h, t; // 队头指针,队尾指针
int q[N]; // 队列数组

入队操作

从下标为 1 的位置开始存储有效元素,避免 0 索引带来的歧义。

void push(int x) {
    q[++t] = x;
}

时间复杂度 O(1)。

出队操作

只需移动队头指针,无需真正删除数据。

void pop() {
    h++;
}

时间复杂度 O(1)。

获取队头与队尾

注意队头元素实际位于 h + 1 处,因为 h 标记的是前驱位置。

int front() { return q[h + 1]; }
int back()  { return q[t]; }

判空与大小

bool empty() { return t == h; }
    {  t - h; }
int
size
()
return

完整测试示例

#include <iostream>
using namespace std;

const int N = 1e6 + 10;
int h, t;
int q[N];

void push(int x) { q[++t] = x; }
void pop()       { h++; }
int front()      { return q[h + 1]; }
int back()       { return q[t]; }
bool empty()     { return t == h; }
int size()       { return t - h; }

int main() {
    for (int i = 1; i <= 10; i++) push(i);
    while (size()) {
        cout << front() << " " << back() << endl;
        pop();
    }
    return 0;
}

STL 中的 queue 容器

C++ 标准库提供了 std::queue,基于双端队列或 deque 实现,无需关心底层内存管理,适合快速开发。

基本用法

#include <queue>
queue<int> q;

常用接口

  • push(x): 入队
  • pop(): 出队
  • front(): 获取队头(不删除)
  • back(): 获取队尾(不删除)
  • empty(): 判空
  • size(): 元素个数

综合测试

#include <iostream>
#include <queue>
using namespace std;

typedef pair<int, int> PII;

int main() {
    queue<PII> q;
    for (int i = 1; i <= 10; i++) {
        q.push({i, i * 10});
    }
    while (!q.empty()) {
        auto t = q.front();
        q.pop();
        cout << t.first << " " << t.second << endl;
    }
    return 0;
}

在实际算法竞赛或工程中,若对性能有极致要求且场景固定,数组模拟往往更快;若追求开发效率和代码可读性,STL queue 是首选。

目录

  1. 队列基础概念
  2. 队列的手动模拟实现
  3. 初始化
  4. 入队操作
  5. 出队操作
  6. 获取队头与队尾
  7. 判空与大小
  8. 完整测试示例
  9. STL 中的 queue 容器
  10. 基本用法
  11. 常用接口
  12. 综合测试

更多推荐文章

查看全部
  • Unity VR 高分辨率全景视频播放性能优化
  • JDK8 至 JDK25 全版本特性深度解析
  • WAVM 快速入门:WebAssembly 模块编译与运行
  • Java 基础:8 大基本数据类型详解及面试题
  • AI 智能填表助手:基于大模型的 Web 表单自动填写工具
  • Hive 多租户管理:企业级部署方案
  • IntelliJ IDEA 集成 GitHub Copilot 安装与实战指南
  • C++继承机制详解:同名隐藏与重载的区别、派生类默认成员函数及栈的实现
  • AI 并非前端与 UI 的终结者,而是效率提升的加速器
  • AI 无限学习与进化研究登 Nature;Meta 提出多模态模型训练方法 Transfusion
  • 推进AI大模型在金融行业应用的五项建议
  • Python 游戏编程入门:使用 Pygame 实现图形绘制与动画
  • Apache IoTDB 集群安装部署指南与技术优势分析
  • IntelliJ IDEA 2024.3 配置显示 Local Changes 窗口方法
  • 灵感画廊:基于Stable Diffusion的极简AI绘画体验
  • Python Django Web 框架核心功能与实战案例
  • MAVROS 安装配置及 ROS C++ 无人机控制基础
  • Windows 10/11 安装与配置 OpenSSH 指南
  • 脉脉平台深度测评:AI 创作者 xAMA 活动指南
  • QQ 机器人接入 OpenClaw 配置指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online