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

std::vector

المصفوفة الديناميكية std::vector

std::vector مصفوفة ديناميكية تكبر تلقائيًا حسب الحاجة، وتُعد الحاوية الافتراضية والأكثر استخدامًا بـ C++ الحديثة.

على عكس المصفوفة التقليدية ذات الحجم الثابت، vector يدير ذاكرته الداخلية تلقائيًا: يبدأ بسعة معيّنة، وعند امتلائها يحجز كتلة ذاكرة أكبر (عادة ضعف الحجم) وينقل العناصر إليها تلقائيًا. الوصول العشوائي للعناصر عبر [] أو at() بسرعة ثابتة O(1) تمامًا كالمصفوفة العادية، والإضافة بالنهاية عبر push_back سريعة جدًا في المتوسط.

يُنصح باستخدام vector كخيار افتراضي أول لأي قائمة عناصر بـ C++، وعدم التفكير بحاوية أخرى (list، deque) إلا لحاجة أداء محدّدة ومثبتة.

الصياغة

std::vector<Type> name;
name.push_back(value);
name[index];

📄 مثال

#include <vector>

std::vector<int> nums = {10, 20, 30};
nums.push_back(40);

for (int n : nums) {
    std::cout << n << " ";
} // 10 20 30 40

std::cout << nums.size();  // 4
std::cout << nums[1];      // 20

أهم النقاط

العنصرالوظيفة
push_back(v)إضافة عنصر بنهاية المتّجه — سريعة في المتوسط O(1) مطفأة
operator[] / at(i)وصول عشوائي بسرعة ثابتة؛ at() تفحص الحدود وترمي استثناء عند تجاوزها، [] لا تفحص
size() / empty()عدد العناصر الحالي، وفحص سريع إن كان المتّجه فارغًا
reserve(n)تحجز سعة مسبقًا لتفادي إعادة التحجيم المتكررة عند معرفة العدد التقريبي سلفًا

💡 نصائح عملية

  • استخدم reserve() قبل حلقة تضيف عددًا كبيرًا معروفًا من العناصر — يوفّر إعادة تحجيم وحجز ذاكرة متكرر
  • فضّل at() على [] أثناء التطوير والتصحيح — ترمي استثناءً واضحًا عند تجاوز الحدود بدل سلوك غير معرَّف

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

  • الوصول بـ [] لفهرس خارج الحدود — سلوك غير معرَّف قد لا يظهر خطأً فوريًا لكنه يفسد الذاكرة
  • الاحتفاظ بمؤشّر أو مرجع لعنصر بالمتّجه ثم إضافة عناصر أخرى — إعادة التحجيم قد تُبطل كل المؤشرات القديمة

خصائص ذات صلة

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