شرح C++

STL والمتّجهات (Vectors)

ما هي STL؟

STL (مكتبة القوالب القياسية) مجموعة حاويات وخوارزميات جاهزة وفعّالة: المتّجهات، الخرائط، المجموعات، وخوارزميات الترتيب والبحث. مبنية على القوالب، فتعمل مع أي نوع.

المتّجه (vector)

مصفوفة ديناميكية تنمو وتتقلّص تلقائيًّا — البديل الحديث للمصفوفات الثابتة. يحتاج <vector>:

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

int main() {
    vector<int> numbers = {10, 20, 30};

    numbers.push_back(40);      // إضافة للنهاية
    cout << numbers[0];          // 10
    cout << numbers.size();      // 4
    return 0;
}

الإضافة والحذف

vector<string> names = {"علي", "سارة"};

names.push_back("خالد");    // إضافة للنهاية
names.pop_back();           // حذف الأخير
names.insert(names.begin(), "نور");   // إضافة في البداية
names.clear();              // مسح الكل
cout << names.empty();      // 1 (فارغ)

المرور على المتّجه

vector<int> scores = {85, 90, 78};

// for-each (الأنظف)
for (int score : scores) {
    cout << score << " ";
}

// بالفهرس
for (int i = 0; i < scores.size(); i++) {
    cout << scores[i] << " ";
}

مثال: حساب المجموع والمتوسّط

vector<int> nums = {10, 20, 30, 40};
int sum = 0;

for (int n : nums) sum += n;

cout << "المجموع: " << sum << endl;            // 100
cout << "المتوسّط: " << sum / nums.size();      // 25

دوال مفيدة

الدالةالوظيفة
push_back(x)إضافة للنهاية
pop_back()حذف الأخير
size()عدد العناصر
empty()فحص الفراغ
clear()مسح الكل
at(i)وصول آمن

vector مقابل المصفوفة

💡 يُفضّل vector على المصفوفات الثابتة في C++ الحديث: حجمه مرن، يعرف حجمه، ويدير ذاكرته تلقائيًّا — بلا new/delete.

أخطاء شائعة

  • الوصول لفهرس خارج الحدود بـ [] (لا فحص) — استخدم .at() للأمان.
  • نسيان #include <vector>.

🎯 التالي: حاويات STL والخوارزميات.