أساسيات std::vector: push_back وsize وcapacity
أنشئ المتجهات وكبّرها وافحصها، وافهم الفرق بين السعة والحجم.
أساسيات std::vector: push_back وsize وcapacity درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.
لماذا نستخدم std::vector؟
يُعد std::vector الحاوية الافتراضية في C++. إذ يزداد حجمه تلقائيًا، ويدير الذاكرة نيابةً عنك، ويوفر وصولًا عشوائيًا بتعقيد O(1). استخدمه ما لم يكن لديك سبب محدد لعدم استخدامه.
التضمين والتصريح
ضمّن <vector> وصرّح عن المتجه مع تحديد نوع عناصره كمعامل للقالب.
#include <vector>
std::vector<int> nums;
std::vector<std::string> names = {"Ada", "Bob"};صيغ التهيئة
توجد عدة طرق لبدء متجه:
std::vector<int> a; // empty
std::vector<int> b(5); // 5 zeros
std::vector<int> c(5, 42); // 5 copies of 42
std::vector<int> d{1, 2, 3}; // {1,2,3}
std::vector<int> e(d); // copy of dpush_back: الإضافة في النهاية
أضف عنصرًا إلى النهاية باستخدام push_back. وتبلغ كلفته O(1) بالتكلفة التراكمية.
std::vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);emplace_back: الإنشاء في موضعه
يمرر emplace_back معاملاته إلى مُنشئ العنصر، فلا ينشئ كائنًا مؤقتًا. وهو أسرع قليلًا مع الأنواع غير البسيطة.
std::vector<std::pair<int,int>> v;
v.emplace_back(1, 2); // constructs a pair in placesize مقابل capacity
مفهومان مختلفان:
- size — عدد العناصر المخزنة حاليًا
- capacity — عدد العناصر التي يمكن للتخزين استيعابها دون إعادة تخصيص
تزداد السعة على دفعات، وغالبًا ما تتضاعف.
فحص size وcapacity
استخدم دوال العضو المطابقة:
std::vector<int> v;
for (int i = 0; i < 10; ++i) {
v.push_back(i);
std::cout << "size=" << v.size() << " capacity=" << v.capacity() << "\n";
}reserve: حجز السعة مسبقًا
إذا كنت تعرف عدد العناصر التي ستضيفها، فاستدعِ reserve أولًا لتجنب عمليات إعادة التخصيص المتكررة.
std::vector<int> v;
v.reserve(1000000); // preallocate
for (int i = 0; i < 1000000; ++i) v.push_back(i);shrink_to_fit: تحرير الذاكرة
بعد حذف العديد من العناصر، حرّر السعة غير المستخدمة باستخدام shrink_to_fit. هذا السلوك غير إلزامي، فقد تحتفظ المنظومة بمساحة إضافية.
الوصول إلى العناصر
أربع طرق:
v[i]— دون التحقق من الحدودv.at(i)— يتحقق من الحدود ويطلق استثناءًv.front()— العنصر الأولv.back()— العنصر الأخير
الفحص والمسح
تحقق من كون المتجه فارغًا باستخدام empty(). واحذف جميع العناصر باستخدام clear()، مع بقاء السعة دون تغيير.
اختبار سريع
لماذا يستغرق push_back وقتًا تراكميًا قدره O(1)؟
مراجعة
يمثل std::vector مصفوفة قابلة للنمو توفر وصولًا عشوائيًا بتعقيد O(1). يمثل size() عدد العناصر، بينما تمثل capacity() حجم التخزين. تمنع reserve() إعادة التخصيص عندما يكون الحجم النهائي معروفًا.
الأسئلة الشائعة
هل درس «أساسيات std::vector: push_back وsize وcapacity» مجاني؟
نعم — نص درس «أساسيات std::vector: push_back وsize وcapacity» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.
ماذا ستتعلم في «أساسيات std::vector: push_back وsize وcapacity»؟
أنشئ المتجهات وكبّرها وافحصها، وافهم الفرق بين السعة والحجم. تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟
لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «أساسيات std::vector: push_back وsize وcapacity»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟
نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أساسيات std::vector: push_back وsize وcapacity
- التكرار على المتجهات: الفهرسة وrange-for والمكرّرات
- تعديل المتجهات: insert وerase وclear
- vector مقابل std::array ومصفوفة C