מעבר על איברים באמצעות לולאת for
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C++ של Coddy. שיעור 14 מתוך 56.
עכשיו, כשאתה יודע איך לגשת לאיברים בודדים ולבדוק את הגודל של וקטור, נלמד איך לעבד כל איבר באופן שיטתי באמצעות לולאת for מסורתית. הגישה הזו משלבת את השיטה .size() עם גישה המבוססת על אינדקס כדי לעבור על כל איבר לפי הסדר.
לולאת for מסורתית משתמשת במשתנה אינדקס שמתחיל ב-0 ומתקדם עד שהוא מגיע לגודל של המערך:
std::vector<std::string> names = {"Alice", "Bob", "Charlie"};
for (int i = 0; i < names.size(); i++) {
std::cout << names[i] << std::endl;
}בדוגמה הזו, תנאי הלולאה i < names.size() מבטיח שלא נחרוג מגבולות הווקטור, ואילו names[i] ניגש לכל איבר באמצעות האינדקס הנוכחי. הלולאה תדפיס כל שם בשורה נפרדת.
תבנית זו היא בסיסית לעיבוד אוספי נתונים. משתנה האינדקס i נותן לך שליטה מדויקת על האיבר שאיתו אתה עובד, ולכן הוא שימושי כשצריך לדעת מה המיקום של כל איבר או כשרוצים לשנות איברים במהלך האיטרציה.
שימו לב שלאחר שהלולאה מסתיימת, i שווה ל־names.size(), במקרה הזה, 3, מכיוון שהלולאה נעצרת ברגע שהתנאי i < names.size() הופך לשקרי.
אתגר
קלצרו תוכנית שמשתמשת בלולאת for מסורתית כדי לעבור על מערך של שמות מוצרים ולהציג אותם כרשימה ממוספרת.
הקלט הבא יסופק:
- מספר שלם
nהמייצג את מספר המוצרים - לאחר מכן,
nמחרוזות המייצגות שמות של מוצרים
על התוכנית שלכם:
- ליצור
std::vector<std::string>בשםproducts - להשתמש ב-
push_back()כדי להוסיף למערך כל אחד מ-nשמות המוצרים - להשתמש בלולאת for מסורתית עם משתנה אינדקס כדי לעבור על המערך
- בתוך הלולאה, להשתמש בשיטה
.size()כתנאי הלולאה - להשתמש באופרטור הסוגריים המרובעים
[]כדי לגשת לכל איבר לפי האינדקס שלו - להדפיס כל מוצר עם מספר המיקום שלו (החל מ-1) בתבנית שצוינה
השתמשו בתבנית הפלט המדויקת הבאה:
Product 1: [first product name]
Product 2: [second product name]
Product 3: [third product name]
...לולאת ה-for צריכה להתחיל באינדקס 0, להשתמש ב-i < products.size() כתנאי, ולהגדיל את i בכל איטרציה. בעת ההדפסה, הוסיפו 1 לאינדקס כדי להציג מספרי מיקום שמתחילים מ-1.
נסו בעצמכם
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
// קרא את מספר המוצרים
int n;
cin >> n;
// צור וקטור לאחסון שמות המוצרים
vector<string> products;
// קרא את שמות המוצרים והוסף אותם לווקטור
for (int i = 0; i < n; i++) {
string product;
cin >> product;
products.push_back(product);
}
// TODO: כתוב את הקוד שלך למטה
// השתמש בלולאת for רגילה כדי לעבור על הווקטור
// והדפס כל מוצר עם מספר המיקום שלו
return 0;
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מצביעים וזיכרון
מהו מצביע?אופרטור קבלת כתובתאופרטור ביטול הפניהמצביעי Nullמצביעים ומערכיםזיכרון דינמי באמצעות 'new'שחרור זיכרון באמצעות 'delete'סיכום — תרגול מצביעים2וקטורים (מערכים דינמיים)
היכרות עם std::vectorיצירת וקטורהוספת איבריםגישה לאיבריםגודל הווקטורמעבר על איברים באמצעות לולאת forלולאת for מבוססת טווחהסרת איבריםסיכום — פעולות על וקטורים5פרויקט: כלי לניהול מלאי
הגדרת הפרויקטהוספה ועדכון של פריטיםתרגלו בעצמכם: קומפיילר C++ אונליין