C++ 任务队列:初学者完全指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

C++ 任务队列简介



任务队列(queue)是编程中一种基础的数据结构,它遵循 FIFO(先进先出) 原则:第一个添加的元素将第一个被取出。想象一下商店里的普通队列——第一位顾客首先被服务。在 C++ 中,队列操作通过容器 std::queue 实现,它是标准模板库(STL)的一部分。



在本文中,我们将详细讲解如何在 C++ 中创建、填充和处理任务队列。您将了解有哪些可用方法,如何避免常见错误,以及队列如何在从多线程系统到请求处理的实际项目中应用。



队列的基本操作



创建和初始化队列



要在 C++ 中使用队列,需要包含头文件 <queue>。基本队列声明如下:



#include <iostream>#include <queue>

int main() { std::queue<int> taskQueue; // 整数队列 return 0;}


您可以为任何数据类型创建队列——字符串、自定义结构、指针。例如,用于处理订单的任务队列:



#include <queue>#include <string>

struct Order { int id; std::string description;};

int main() { std::queue<Order> orderQueue; return 0;}


添加和删除元素



队列操作的主要方法:



  • push() — 在队列末尾添加元素
  • pop() — 删除队列中的第一个元素
  • front() — 返回第一个元素的引用(不删除)
  • back() — 返回最后一个元素的引用
  • empty() — 检查队列是否为空
  • size() — 返回元素数量


来看一个逐步处理任务的示例:



#include <iostream>#include <queue>

int main() { std::queue<std::string> tasks;

// 添加任务 tasks.push("任务 1:检查邮件"); tasks.push("任务 2:撰写报告"); tasks.push("任务 3:召开会议");

std::cout << "第一个任务:" << tasks.front() << std::endl; std::cout << "最后一个任务:" << tasks.back() << std::endl; std::cout << "任务总数:" << tasks.size() << std::endl;

// 按顺序处理任务 while (!tasks.empty()) { std::cout << "正在执行:" << tasks.front() << std::endl; tasks.pop(); // 删除已完成的任务 }

std::cout << "所有任务已完成!" << std::endl; return 0;}


执行结果:

第一个任务:任务 1:检查邮件最后一个任务:任务 3:召开会议任务总数:3正在执行:任务 1:检查邮件正在执行:任务 2:撰写报告正在执行:任务 3:召开会议所有任务已完成!


优先队列:当顺序很重要时



有时任务具有不同的优先级。例如,关键错误应该比计划更新更早处理。在这种情况下,使用 std::priority_queue,它会自动按优先级对元素进行排序。



#include <iostream>#include <queue>#include <vector>

int main() { // 默认情况下——最大元素具有最高优先级 std::priority_queue<int> highPriorityTasks;

highPriorityTasks.push(5); // 普通任务 highPriorityTasks.push(10); // 紧急任务 highPriorityTasks.push(1); // 低优先级

while (!highPri

博客

书籍推荐