قوائم المهام في C++: دليل شامل للمبتدئين

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة في قوائم المهام في C++



قائمة المهام (queue) هي إحدى هياكل البيانات الأساسية في البرمجة، والتي تعمل وفق مبدأ FIFO (First In, First Out): أول عنصر يتم إضافته هو أول عنصر يتم استخراجه. تخيل طابورًا عاديًا في متجر — أول عميل يتم خدمته أولاً. في 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

المدونات

توصيات الكتب