إزالة العناصر
جزء من قسم Logic & Flow في رحلة C++ على Coddy — الدرس 38 من 56.
في بعض الأحيان تحتاج إلى إزالة العناصر من المجموعة عندما لا تعد هناك حاجة إليها. تسمح لك الطريقة .erase() بإزالة عنصر معين من خلال توفير قيمته.
إليك كيفية إزالة عنصر من مجموعة (set):
std::set<int> numbers = {10, 20, 30, 40};
numbers.erase(20); // يزيل العنصر 20بعد استدعاء .erase(20)، ستحتوي المجموعة فقط على {10, 30, 40}. إذا حاولت مسح عنصر غير موجود في المجموعة، فلن يحدث شيء - تظل المجموعة دون تغيير ولا يحدث أي خطأ.
هذا يجعل .erase() آمناً للاستخدام حتى عندما لا تكون متأكداً من وجود العنصر. إنه مفيد بشكل خاص للحفاظ على مجموعات نظيفة حيث تحتاج إلى إزالة عناصر محددة بناءً على مدخلات المستخدم أو منطق البرنامج.
التحدي
سهلقم بإنشاء برنامج يوضح كيفية إزالة العناصر من std::set باستخدام طريقة .erase(). سيختبر هذا التحدي فهمك لكيفية إزالة عناصر محددة بأمان من المجموعة وملاحظة النتائج.
سيتم توفير المدخلات التالية:
- عدد صحيح
nيمثل عدد العناصر التي سيتم إضافتها في البداية إلى المجموعة - ثم
nمن الأعداد الصحيحة ليتم إدراجها في المجموعة - عدد صحيح
mيمثل عدد العناصر المراد إزالتها - ثم
mمن الأعداد الصحيحة التي تمثل العناصر المراد إزالتها من المجموعة
يجب أن يقوم برنامجك بما يلي:
- إنشاء
std::set<int>فارغة - قراءة عدد العناصر المراد إضافتها وإدراجها في المجموعة باستخدام
.insert() - طباعة حجم المجموعة الأولي بعد كل عمليات الإدراج
- قراءة عدد العناصر المراد إزالتها
- لكل عنصر مراد إزالته، استخدم
.erase()لمحاولة الإزالة - بعد كل محاولة إزالة، اطبع الحجم الحالي للمجموعة
- أخيرًا، قم بالمرور عبر العناصر المتبقية في المجموعة واطبعها بترتيب فرزها
استخدم تنسيق المخرجات الدقيق التالي:
حجم المجموعة الأولي:
Initial size: [size]بعد كل محاولة إزالة:
After removing [number]: size = [current_size]العناصر المتبقية النهائية:
Remaining elements: [element1] [element2] [element3] ...تذكر أن .erase() تتعامل بأمان مع محاولات إزالة العناصر غير الموجودة في المجموعة - تظل المجموعة دون تغيير ولا يحدث أي خطأ. استخدم حلقة for المبنية على النطاق (range-based for loop) لطباعة العناصر المتبقية، وسيتم عرضها تلقائيًا بترتيب فرزها لأن المجموعات (sets) تحافظ على عناصرها في تسلسل مرتب.
ورقة مرجعية
استخدم .erase() لإزالة عنصر معين من مجموعة (set) من خلال توفير قيمته:
std::set<int> numbers = {10, 20, 30, 40};
numbers.erase(20); // يزيل العنصر 20إذا حاولت مسح عنصر غير موجود في المجموعة، فلن يحدث شيء - تظل المجموعة دون تغيير ولا يحدث أي خطأ، مما يجعل استخدام .erase() آمناً.
جرّب بنفسك
#include <iostream>
#include <set>
using namespace std;
int main() {
// قراءة عدد العناصر المراد إضافتها
int n;
cin >> n;
// إنشاء مجموعة فارغة
set<int> mySet;
// قراءة وإدراج n من العناصر
for (int i = 0; i < n; i++) {
int element;
cin >> element;
// إدراج العنصر في المجموعة
}
// قراءة عدد العناصر المراد إزالتها
int m;
cin >> m;
// TODO: اكتب الكود الخاص بك أدناه
// 1. طباعة حجم المجموعة الأولي
// 2. لكل عنصر يراد إزالته، استخدم .erase() واطبع الحجم بعد كل عملية إزالة
// 3. طباعة العناصر المتبقية في المجموعة
return 0;
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1المؤشرات والذاكرة
ما هو المؤشر؟معامل العنوان (Address-Of)معامل الوصول للقيمة (Dereference)المؤشرات الفارغة (Null Pointers)المؤشرات والمصفوفاتالذاكرة الديناميكية باستخدام 'new'تحرير الذاكرة باستخدام 'delete'مراجعة - تمارين على المؤشرات2المتجهات (المصفوفات الديناميكية)
مقدمة إلى std::vectorإنشاء Vectorإضافة العناصرالوصول إلى العناصرحجم الـ Vectorالتكرار باستخدام For Loopالـ Range-Based For Loopإزالة العناصرملخص - عمليات الـ Vector6المجموعات (عناصر فريدة)
مقدمة إلى std::setإنشاء مجموعة وإضافة عناصرالتحقق من وجود العناصرإزالة العناصرالتكرار عبر المجموعةملخص - أرقام فريدة