יצירת קבוצה והוספת איברים
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C++ של Coddy. שיעור 36 מתוך 56.
עכשיו, כשאתה יודע מהי קבוצה, נלמד איך ליצור אחת ולהוסיף לה איברים. כדי להוסיף איברים ל־std::set, משתמשים בשיטה .insert().
כך יוצרים קבוצה ריקה ומוסיפים אליה איברים:
std::set<int> numbers;
numbers.insert(5);
numbers.insert(2);
numbers.insert(8);התכונה החשובה ביותר של קבוצות היא שהן דוחות כפילויות באופן אוטומטי. אם תנסה להוסיף את אותו ערך פעמיים, הקבוצה תישאר ללא שינוי:
numbers.insert(5); // זה לא יוסיף עוד 5
numbers.insert(5); // גם זה לא יוסיף עוד 5לאחר כל ההוספות האלה, הקבוצה שלך תכיל רק שלושה איברים ייחודיים: 2, 5 ו-8 (ממוינים אוטומטית). ניסיונות ההוספה הכפולים של 5 פשוט מתעלמים מהם, וזה בדיוק מה שהופך קבוצות לשימושיות כל כך לשמירה על אוספים של נתונים ייחודיים.
אתגר
קלצרו תוכנית שמדגימה את התכונה של std::set לשמירת איברים ייחודיים, באמצעות הוספת כמה מספרים שלמים לקבוצה, כולל ערכים כפולים, ולאחר מכן הצגת הגודל הסופי כדי להוכיח שכפילויות מתעלמים מהן באופן אוטומטי.
הקלט הבא יסופק:
- מספר שלם
nהמייצג את מספר המספרים השלמים להוספה - לאחר מכן
nמספרים שלמים שיש להוסיף לקבוצה
על התוכנית שלכם לבצע את הפעולות הבאות:
- ליצור
std::set<int>ריקה - לקרוא את מספר המספרים השלמים שיש להוסיף
- להשתמש בלולאה כדי לקרוא כל מספר שלם ולהוסיף אותו לקבוצה באמצעות המתודה
.insert() - לאחר כל ההוספות, להדפיס את הגודל הסופי של הקבוצה באמצעות המתודה
.size() - להדפיס הודעה המציגה כמה ניסיונות להוסיף ערכים כפולים נדחו
השתמשו בפורמט הפלט המדויק הבא:
Set size: [final_size]
Duplicates ignored: [number_of_duplicates]יש לחשב את מספר הערכים הכפולים שנדחו כהפרש בין המספר הכולל של ניסיונות ההוספה לבין הגודל הסופי של הקבוצה. הדבר מדגים שקבוצות שומרות באופן אוטומטי על ייחודיות באמצעות דחיית ערכים כפולים, שהיא התכונה המרכזית שלהן לאחסון אוספים של איברים ייחודיים.
נסו בעצמכם
#include <iostream>
#include <set>
using namespace std;
int main() {
// קראו את מספר המספרים השלמים שיש להכניס
int n;
cin >> n;
// צרו קבוצה ריקה
set<int> mySet;
// TODO: כתבו את הקוד שלכם כאן
// השתמשו בלולאה כדי לקרוא n מספרים שלמים ולהכניס אותם לקבוצה
// חשבו כמה ערכים כפולים לא הוכנסו
// הציגו את התוצאות
cout << "Set size: " << mySet.size() << endl;
cout << "Duplicates ignored: " << /* חשבו את מספר הערכים הכפולים */ << endl;
return 0;
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מצביעים וזיכרון
מהו מצביע?אופרטור קבלת כתובתאופרטור ביטול הפניהמצביעי Nullמצביעים ומערכיםזיכרון דינמי באמצעות 'new'שחרור זיכרון באמצעות 'delete'סיכום — תרגול מצביעים2וקטורים (מערכים דינמיים)
היכרות עם std::vectorיצירת וקטורהוספת איבריםגישה לאיבריםגודל הווקטורמעבר על איברים באמצעות לולאת forלולאת for מבוססת טווחהסרת איבריםסיכום — פעולות על וקטורים5פרויקט: כלי לניהול מלאי
הגדרת הפרויקטהוספה ועדכון של פריטים6קבוצות (איברים ייחודיים)
היכרות עם std::setיצירת קבוצה והוספת איבריםבדיקת קיום איבריםהסרת איבריםמעבר על איברי קבוצהסיכום – מספרים ייחודייםתרגלו בעצמכם: קומפיילר C++ אונליין