Menu
Coddy logo textTech

לולאת for מבוססת טווח

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

בעוד שלולאות for מסורתיות עם אינדקסים מתאימות היטב למעבר על וקטורים, C++ מציעה פתרון אלגנטי יותר: לולאת for מבוססת טווח. התחביר המודרני הזה מבטל את הצורך בניהול ידני של אינדקסים והופך את הקוד לנקי יותר וקל יותר לקריאה.

לולאת for מבוססת טווח מטפלת עבורך באופן אוטומטי בפרטי האיטרציה. במקום לנהל משתנה אינדקס, פשוט מציינים מה רוצים לעשות עם כל איבר:

std::vector<std::string> names = {"Alice", "Bob", "Charlie"};

for (const std::string& name : names) {
    std::cout << name << std::endl;
}

הלולאה הזאת עושה בדיוק את אותו הדבר כמו הגישה המסורתית המבוססת על אינדקס, אבל בתחביר פשוט הרבה יותר. המשתנה name מקבל באופן אוטומטי את הערך של כל איבר במערך, אחד בכל פעם.

ייתכן שתבחין בסמל & בהצהרת הלולאה: const std::string& name. בהקשר הזה, & לא מציין „כתובת של”, כפי שאולי ראית בעבר. כאן הוא מצהיר על name כעל הפניה (כינוי) ישירות לכל איבר במערך, במקום ליצור עותק שלו. חשוב על כך כמתן שם חדש לאותו פיסת נתונים, בדומה לשימוש במצביע לאיבר, אך בלי צורך לבצע ביטול הפניה אליו בתוך גוף הלולאה.

מילת המפתח const היא אמצעי בטיחות: היא מונעת ממך לשנות בטעות את האיבר באמצעות הכינוי בתוך גוף הלולאה. הכינוי עצמו עדיין מתקדם לכל איבר חדש בכל איטרציה. זהו התוכן שאליו ניגשים באמצעות הכינוי ונשאר קבוע, ולא ההתקדמות של הלולאה.

לולאת for מבוססת טווח לא רק קריאה יותר, אלא גם בטוחה יותר — אין סיכון לשגיאות אינדקס, מכיוון שאינך מנהל אינדקסים ידנית. היא פועלת עם כל מכל שמאפשר איטרציה, ולכן היא כלי רב־תכליתי לעיבוד אוספי נתונים ב-C++.

challenge icon

אתגר

קל

צרו תוכנית שמדגימה לולאת for מבוססת טווח על ידי עיבוד אוסף של שמות ערים והצגתם עם מספר התווים בכל שם.

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

  • מספר שלם n המייצג את מספר הערים
  • לאחר מכן n מחרוזות המייצגות שמות של ערים

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

  1. ליצור std::vector<std::string> בשם cities
  2. להשתמש ב-push_back() כדי להוסיף לווקטור כל אחד מ-n שמות הערים
  3. להשתמש בלולאת for מבוססת טווח כדי לעבור על הווקטור
  4. עבור כל עיר בלולאה, להדפיס את שם העיר ואחריו את אורכו באמצעות המתודה .length()
  5. לאחר הלולאה, להדפיס את המספר הכולל של הערים שעובדו באמצעות המתודה .size() של הווקטור

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

City: [city name] (Length: [number of characters])\nCity: [city name] (Length: [number of characters])\n...\nTotal cities processed: [total count]

על לולאת ה-for מבוססת הטווח להשתמש בתחביר for (const std::string& city : cities) כדי לעבור על כל איבר בווקטור. השתמשו ב-city.length() כדי לקבל את מספר התווים בכל שם עיר.

נסו בעצמכם

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main() {
    // קראו את מספר הערים
    int n;
    cin >> n;
    
    // צרו וקטור לאחסון שמות הערים
    vector<string> cities;
    
    // קראו את שמות הערים והוסיפו אותם לווקטור
    for (int i = 0; i < n; i++) {
        string city;
        cin >> city;
        cities.push_back(city);
    }
    
    // TODO: כתבו את הקוד שלכם למטה
    // השתמשו בלולאת for מבוססת טווח כדי לעבור על הווקטור cities
    // הדפיסו כל עיר ואת אורך שמה בפורמט שצוין
    // לאחר הלולאה, הדפיסו את מספר הערים הכולל שעובדו
    
    return 0;
}
quiz iconבחנו את עצמכם

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

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

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