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 الكامل بالعربي.