0Pricing
C++ Academy · درس

تعديل المتجهات: ‏insert وerase وclear

أدرج العناصر واحذفها وامسحها مع مراعاة قواعد إبطال المكرّرات.

تعديل المتجهات: ‏insert وerase وclear درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.

الإدراج في النهاية

أسرع طريقة للإدراج هي push_back أو emplace_back؛ فكلاهما يضيف العنصر إلى النهاية بتكلفة تراكمية قدرها O(1).

الإدراج في موضع عشوائي

تنقل insert(pos, value) كل العناصر التي تلي pos إلى اليمين. وهذه عملية بتعقيد O(n).

std::vector<int> v = {1, 2, 4, 5};
v.insert(v.begin() + 2, 3);   // {1, 2, 3, 4, 5}

إدراج نطاق

أدرج جميع العناصر من حاوية أخرى دفعةً واحدة.

std::vector<int> v = {1, 5};
std::vector<int> mid = {2, 3, 4};
v.insert(v.begin() + 1, mid.begin(), mid.end());
// {1, 2, 3, 4, 5}

إدراج نسخ متعددة

أدرج n نسخ من القيمة نفسها.

std::vector<int> v = {1, 4};
v.insert(v.begin() + 1, 2, 99);   // {1, 99, 99, 4}

حذف عنصر واحد

تحذف erase(pos) العنصر الموجود عند المكرر، وتنقل كل العناصر التي تليه إلى اليسار. وتعيد مكررًا إلى العنصر التالي.

std::vector<int> v = {1, 2, 3, 4};
v.erase(v.begin() + 1);   // {1, 3, 4}

حذف نطاق

احذف جميع العناصر الموجودة في النطاق نصف المفتوح [first, last).

v.erase(v.begin() + 1, v.begin() + 3);

نمط الحذف والإزالة

لحذف جميع العناصر المطابقة لدالة شرطية دون ترك فراغات، اجمع بين std::remove_if وerase.

#include <algorithm>
v.erase(
    std::remove_if(v.begin(), v.end(), [](int x) { return x < 0; }),
    v.end()
);

C++20: ‏std::erase وstd::erase_if

أضافت C++20 دوالًا حرة ت encapsulate نمط الحذف والإزالة.

std::erase(v, 0);                    // remove all 0s
std::erase_if(v, [](int x) { return x < 0; });

clear: حذف جميع العناصر

تحذف clear() جميع العناصر، لكنها تُبقي السعة. وهذا مفيد عندما تخطط لإعادة ملء المتجه.

pop_back: حذف العنصر الأخير

تحذف العنصر الأخير بتعقيد O(1). ولا تعيد قيمة؛ لذا احصل على العنصر أولًا إذا كنت بحاجة إليه.

int last = v.back();
v.pop_back();

قواعد إبطال المكررات

تُبطل insert وerase صلاحية كل مكرر يبدأ من الموضع المعدّل وما يليه. ويعيد الحذف المكرر الصالح التالي، بحيث يمكنك متابعة التكرار.

اختبار سريع

ماذا تفعل std::remove_if وحدها بالمتجه؟

مراجعة

تعمل insert وerase في مواضع عشوائية بتعقيد O(n). استخدم push_back/pop_back لتنفيذ العمليات في النهاية بتعقيد O(1). طبّق نمط الحذف والإزالة (أو std::erase_if في C++20) لحذف العناصر المطابقة.

الأسئلة الشائعة

هل درس «تعديل المتجهات: ‏insert وerase وclear» مجاني؟

نعم — نص درس «تعديل المتجهات: ‏insert وerase وclear» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.

ماذا ستتعلم في «تعديل المتجهات: ‏insert وerase وclear»؟

أدرج العناصر واحذفها وامسحها مع مراعاة قواعد إبطال المكرّرات. تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟

لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «تعديل المتجهات: ‏insert وerase وclear»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟

نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أساسيات std::vector: ‏push_back وsize وcapacity
  2. التكرار على المتجهات: الفهرسة وrange-for والمكرّرات
  3. تعديل المتجهات: ‏insert وerase وclear
  4. ‏vector مقابل std::array ومصفوفة C
← العودة إلى C++ Academy