Menu
Coddy logo textTech

הסרת איברים

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C++ של Coddy. שיעור 38 מתוך 56.

לפעמים צריך להסיר איברים מקבוצה כשהם כבר לא נחוצים. המתודה .erase() מאפשרת להסיר איבר מסוים על ידי ציון הערך שלו.

כך מסירים איבר מקבוצה:

std::set<int> numbers = {10, 20, 30, 40};
numbers.erase(20);  // מסיר את האיבר 20

לאחר קריאה ל־.erase(20), הקבוצה תכיל רק את {10, 30, 40}. אם תנסה למחוק איבר שאינו קיים בקבוצה, שום דבר לא יקרה — הקבוצה תישאר ללא שינוי ולא תתרחש שגיאה.

כך אפשר להשתמש ב-.erase() בבטחה גם כשלא בטוחים שהאיבר קיים. הדבר שימושי במיוחד לשמירה על אוספים נקיים, שבהם צריך להסיר פריטים מסוימים על סמך קלט מהמשתמש או לוגיקת התוכנית.

challenge icon

אתגר

קל

צרו תוכנית שמדגימה הסרה של איברים מתוך std::set באמצעות המתודה .erase(). האתגר הזה יבדוק את ההבנה שלכם כיצד להסיר בבטחה איברים מסוימים מתוך קבוצה ולבחון את התוצאות.

הקלט הבא יסופק:

  • מספר שלם n המייצג את מספר האיברים שיש להוסיף בתחילה לקבוצה
  • לאחר מכן, n מספרים שלמים שיש להכניס לקבוצה
  • מספר שלם m המייצג את מספר האיברים שיש להסיר
  • לאחר מכן, m מספרים שלמים המייצגים את האיברים שיש להסיר מהקבוצה

התוכנית שלכם צריכה:

  1. ליצור std::set<int> ריקה
  2. לקרוא את מספר האיברים שיש להוסיף ולהכניס אותם לקבוצה באמצעות .insert()
  3. להדפיס את הגודל ההתחלתי של הקבוצה לאחר כל ההכנסות
  4. לקרוא את מספר האיברים שיש להסיר
  5. עבור כל איבר שיש להסיר, להשתמש ב-.erase() כדי לנסות להסיר אותו
  6. לאחר כל ניסיון הסרה, להדפיס את הגודל הנוכחי של הקבוצה
  7. לבסוף, לעבור על האיברים שנותרו בקבוצה ולהדפיס אותם בסדר ממוין

השתמשו בפורמט הפלט המדויק הבא:

הגודל ההתחלתי של הקבוצה:

Initial size: [size]

לאחר כל ניסיון הסרה:

After removing [number]: size = [current_size]

האיברים שנותרו לבסוף:

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

זכרו ש-.erase() מטפלת בבטחה בניסיונות להסיר איברים שאינם קיימים בקבוצה — הקבוצה נשארת ללא שינוי ולא מתרחשת שגיאה. השתמשו בלולאת for מבוססת טווח כדי להדפיס את האיברים שנותרו; הם יוצגו אוטומטית בסדר ממוין, מכיוון שקבוצות שומרות את איבריהן ברצף ממוין.

נסו בעצמכם

#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;
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר C++ אונליין