تخطَّ إلى المحتوى

std::stack

المكدّس (LIFO) std::stack

std::stack حاوية مكيّفة (container adapter) تطبّق مبدأ LIFO — آخر عنصر يدخل هو أول عنصر يخرج، بواجهة push/pop/top فقط.

stack ليست حاوية مستقلة بحد ذاتها بل غلاف يقيّد واجهة حاوية أخرى (deque افتراضيًا) لتوفير عمليات LIFO فقط: push للإضافة بالأعلى، pop لإزالة الأعلى، top للاطلاع على الأعلى دون إزالته. لا يوجد وصول عشوائي ولا مرور بحلقة for على عناصرها — هذا مقصود لضمان الالتزام بمبدأ LIFO الصارم. تُستخدم كثيرًا بخوارزميات تحتاج «تراجع» (undo)، تقييم تعبيرات رياضية، واستدعاءات دوال متداخلة.

الصياغة

std::stack<Type> name;
name.push(value);
name.pop();
name.top();

📄 مثال

#include <stack>

std::stack<int> s;
s.push(1);
s.push(2);
s.push(3);

std::cout << s.top(); // 3 — آخر عنصر أُضيف
s.pop();
std::cout << s.top(); // 2
std::cout << s.size(); // 2

أهم النقاط

العنصرالوظيفة
push(v)إضافة عنصر بأعلى المكدّس
pop()إزالة العنصر العلوي — لا تُرجع قيمته، استخدم top() قبلها
top()الاطلاع على العنصر العلوي دون إزالته
empty()فحص إن كان المكدّس فارغًا — ضروري قبل top()/pop() لتفادي سلوك غير معرَّف

💡 نصائح عملية

  • تحقق دائمًا من !s.empty() قبل استدعاء top() أو pop() — استدعاؤهما على مكدّس فارغ سلوك غير معرَّف
  • استخدمها لخوارزميات «تراجع» (undo)، فحص تطابق الأقواس، وتقييم التعبيرات اللاحقة (postfix)

⚠️ أخطاء شائعة

  • استدعاء pop() أو top() على مكدّس فارغ بدون فحص empty() أولًا — سلوك غير معرَّف قد يعطّل البرنامج
  • توقّع إمكانية المرور بحلقة for على عناصر stack مباشرة — لا يوجد iterator بها، هذا مقصود بالتصميم

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار CPP الكامل بالعربي.