הסרת איברים
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C++ של Coddy. שיעור 38 מתוך 56.
לפעמים צריך להסיר איברים מקבוצה כשהם כבר לא נחוצים. המתודה .erase() מאפשרת להסיר איבר מסוים על ידי ציון הערך שלו.
כך מסירים איבר מקבוצה:
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 מבוססת טווח כדי להדפיס את האיברים שנותרו; הם יוצגו אוטומטית בסדר ממוין, מכיוון שקבוצות שומרות את איבריהן ברצף ממוין.
נסו בעצמכם
#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;
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מצביעים וזיכרון
מהו מצביע?אופרטור קבלת כתובתאופרטור ביטול הפניהמצביעי Nullמצביעים ומערכיםזיכרון דינמי באמצעות 'new'שחרור זיכרון באמצעות 'delete'סיכום — תרגול מצביעים2וקטורים (מערכים דינמיים)
היכרות עם std::vectorיצירת וקטורהוספת איבריםגישה לאיבריםגודל הווקטורמעבר על איברים באמצעות לולאת forלולאת for מבוססת טווחהסרת איבריםסיכום — פעולות על וקטורים5פרויקט: כלי לניהול מלאי
הגדרת הפרויקטהוספה ועדכון של פריטים6קבוצות (איברים ייחודיים)
היכרות עם std::setיצירת קבוצה והוספת איבריםבדיקת קיום איבריםהסרת איבריםמעבר על איברי קבוצהסיכום – מספרים ייחודייםתרגלו בעצמכם: קומפיילר C++ אונליין