Menu
CoddyTech
flag Ar iconالعربيةdown icon

إزالة العناصر

جزء من قسم المنطق وتدفق التنفيذ في رحلة C++ على Coddy. الدرس 16 من 56.

أحيانًا تحتاج إلى إزالة عناصر من متجه عندما لا تعود بحاجة إليها. تتطلب المتجهات استخدام مكرّر مع الطريقة .erase(). يمكنك دمج std::find() مع .erase() لإزالة العناصر حسب قيمتها.

إليك كيفية إزالة عنصر من متجه. تأتي std::find() من الترويسة <algorithm>، لذا أدرجها مع <vector>:

#include <algorithm>
#include <vector>
std::vector<int> numbers = {10, 20, 30, 40};
auto it = std::find(numbers.begin(), numbers.end(), 20);
if (it != numbers.end()) {
    numbers.erase(it);  // يزيل العنصر الموجود عند موضع المكرّر
}

بعد استدعاء erase()، يُزال العنصر في ذلك الموضع وتتحرك جميع العناصر اللاحقة إلى الأسفل. إذا حاولت العثور على عنصر غير موجود ومحوِه، فستُعيد find() القيمة end()، والتحقق من ذلك يمنع الأخطاء.

يجعل هذا النمط إزالة العناصر آمنة ويمكن التنبؤ بها. وهو مفيد بشكل خاص للحفاظ على المجموعات الديناميكية التي تحتاج فيها إلى إزالة عناصر محددة بناءً على إدخال المستخدم أو منطق البرنامج. تذكّر أن تتحقق دائمًا من صلاحية المكرّر قبل الحذف.

challenge icon

التحدي

سهل

أنشئ برنامجًا يوضّح إزالة العناصر من std::vector باستخدام الطريقة .erase() مع std::find(). سيختبر هذا التحدي فهمك لكيفية إزالة عناصر محددة بأمان من متجه وملاحظة النتائج.

ستُقدَّم المدخلات التالية:

  • عدد صحيح n يمثّل عدد العناصر التي ستُضاف إلى المتجه في البداية
  • ثم n أعداد صحيحة لإدراجها في المتجه
  • عدد صحيح m يمثّل عدد العناصر المراد إزالتها
  • ثم m أعداد صحيحة تمثّل العناصر المراد إزالتها من المتجه

ينبغي أن يقوم برنامجك بما يلي:

  1. إنشاء std::vector<int> فارغ
  2. قراءة عدد العناصر المراد إضافتها وإدراجها في المتجه باستخدام .push_back()
  3. طباعة الحجم الابتدائي للمتجه بعد إتمام جميع عمليات الإدراج
  4. قراءة عدد العناصر المراد إزالتها
  5. لكل عنصر مطلوب إزالته، استخدام std::find() للعثور عليه، ثم استخدام .erase() لإزالته إذا عُثر عليه
  6. بعد كل محاولة إزالة، طباعة الحجم الحالي للمتجه
  7. أخيرًا، المرور على العناصر المتبقية في المتجه وطباعتها بالترتيب

استخدم تنسيق الإخراج المحدد التالي:

الحجم الابتدائي للمتجه:

Initial size: [size]

بعد كل محاولة إزالة:

After removing [number]: size = [current_size]

العناصر المتبقية في النهاية:

Remaining elements: [element1] [element2] [element3] ...

تذكّر أن .erase() تتطلب مكرّرًا، لذا يجب أن تستخدم std::find() أولًا للعثور على العنصر. تحقّق دائمًا مما إذا كان قد عُثر على العنصر قبل حذفه. استخدم حلقة for مبنية على النطاق لطباعة العناصر المتبقية بترتيبها الحالي.

جرّب بنفسك

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

int main() {
    // اقرأ عدد العناصر المراد إضافتها
    int n;
    cin >> n;
    
    // أنشئ متجهًا فارغًا
    vector<int> myVector;
    
    // اقرأ وأدرج n عنصرًا
    for (int i = 0; i < n; i++) {
        int element;
        cin >> element;
        // أدرج العنصر في المتجه
    }
    
    // اقرأ عدد العناصر المراد إزالتها
    int m;
    cin >> m;
    
    // TODO: اكتب الكود الخاص بك أدناه
    // 1. اطبع الحجم الأولي للمتجه
    // 2. لكل عنصر مطلوب إزالته، ابحث عنه واستخدم .erase() ثم اطبع الحجم بعد كل عملية إزالة
    // 3. اطبع العناصر المتبقية في المتجه
    
    return 0;
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق وتدفق التنفيذ

تدرّب بنفسك: مترجم C++ عبر الإنترنت