شرح C++

حاويات STL والخوارزميات

الخريطة (map)

تخزّن أزواج مفتاح → قيمة (مثل القاموس)، مرتّبة بالمفتاح:

#include <map>
using namespace std;

map<string, int> ages;
ages["سارة"] = 28;
ages["علي"] = 35;

cout << ages["سارة"];        // 28

for (auto pair : ages) {
    cout << pair.first << ": " << pair.second << endl;
}

المجموعة (set)

تخزّن قيمًا فريدة (بلا تكرار) ومرتّبة تلقائيًّا:

#include <set>
using namespace std;

set<int> numbers = {3, 1, 2, 3, 1};
// تصبح: {1, 2, 3} — حُذف التكرار ورُتّبت

numbers.insert(5);
cout << numbers.count(2);   // 1 (موجود)

المكدّس (stack) — آخر داخل أوّل خارج

#include <stack>
using namespace std;

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

cout << s.top();   // 3 (القمّة)
s.pop();           // يحذف 3
cout << s.top();   // 2

الطابور (queue) — أوّل داخل أوّل خارج

#include <queue>
using namespace std;

queue<string> q;
q.push("أول");
q.push("ثاني");

cout << q.front();   // أول
q.pop();             // يحذف "أول"
cout << q.front();   // ثاني

المكرّرات (Iterators)

مؤشّرات تتنقّل بين عناصر الحاوية:

vector<int> v = {10, 20, 30};

for (auto it = v.begin(); it != v.end(); ++it) {
    cout << *it << " ";   // *it للوصول للقيمة
}

خوارزميات STL

تحتاج <algorithm>:

#include <algorithm>
#include <vector>
using namespace std;

vector<int> v = {30, 10, 20};

sort(v.begin(), v.end());            // ترتيب تصاعدي: 10 20 30
reverse(v.begin(), v.end());          // عكس: 30 20 10

auto found = find(v.begin(), v.end(), 20);
if (found != v.end()) cout << "وُجد";

int big = *max_element(v.begin(), v.end());   // 30

جدول الحاويات

الحاويةالاستخدام
vectorمصفوفة ديناميكية
mapمفتاح → قيمة
setقيم فريدة مرتّبة
stackLIFO
queueFIFO

أخطاء شائعة

  • نسيان #include <algorithm> قبل sort/find.
  • نسيان * للوصول لقيمة المكرّر (*it).

🎯 التالي: الخلاصة وخطواتك بعد C++.