Menu
Coddy logo textTech

גישה לאיברים

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

עכשיו, כשאתה יודע ליצור וקטורים ולהוסיף אליהם איברים, עליך לדעת איך לאחזר איברים מסוימים מהווקטור שלך. C++ מספקת שתי דרכים עיקריות לגשת לאיברים בודדים: אופרטור הסוגריים המרובעים ושיטת .at().

אופרטור הסוגריים המרובעים [] פועל בדיוק כמו במערכים רגילים. מציינים את האינדקס של האיבר שרוצים לגשת אליו:

std::vector<int> numbers = {10, 20, 30, 40};
int first = numbers[0];    // מקבל 10
int third = numbers[2];    // מקבל 30

השיטה .at() מספקת דרך חלופית לגשת לאיברים, עם הבדל חשוב — היא כוללת בדיקת גבולות:

int first = numbers.at(0);    // מקבל 10
int third = numbers.at(2);    // מקבל 30

ההבדל העיקרי הוא בטיחות: אם תנסה לגשת לאינדקס שאינו קיים, [] עלול לגרום להתנהגות בלתי צפויה, ואילו .at() יזרוק חריגה כדי להתריע על השגיאה. למטרות למידה, שתי השיטות מתאימות, אבל .at() מספק הגנה נוספת מפני גישה למיקומים לא תקינים בווקטור שלך.

challenge icon

אתגר

קל

צרו תוכנית שמדגימה גישה לאיברים ב־vector על ידי שליפת איברים ספציפיים מ־vector באמצעות אופרטור הסוגריים המרובעים וגם באמצעות המתודה .at().

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

  • מספר שלם n המייצג את מספר האיברים ב־vector
  • לאחר מכן n מספרים שלמים שימלאו את ה־vector
  • מספר שלם index1 המייצג את האינדקס הראשון שאליו יש לגשת
  • מספר שלם index2 המייצג את האינדקס השני שאליו יש לגשת

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

  1. ליצור std::vector<int> בשם data
  2. להשתמש ב־push_back() כדי להוסיף ל־vector כל אחד מ־n המספרים שבקלט
  3. לגשת לאיבר שב־index1 באמצעות אופרטור הסוגריים המרובעים [] ולשמור אותו במשתנה בשם value1
  4. לגשת לאיבר שב־index2 באמצעות המתודה .at() ולשמור אותו במשתנה בשם value2
  5. להדפיס את הערכים שאליהם ניגשתם ואת האינדקסים המתאימים להם
  6. להדפיס את האיבר הראשון והאחרון ב־vector באמצעות גישה לפי אינדקס

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

Element at index [index1]: [value1]
Element at index [index2]: [value2]
First element: [first value]
Last element: [last value]

כדי לגשת לאיבר האחרון, השתמשו ב־data.size() - 1 בתור האינדקס עם אופרטור הסוגריים המרובעים.

נסו בעצמכם

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

int main() {
    // קראו את הקלט
    int n;
    cin >> n;
    
    vector<int> data;
    
    // קראו n מספרים שלמים והוסיפו אותם לווקטור
    for (int i = 0; i < n; i++) {
        int num;
        cin >> num;
        data.push_back(num);
    }
    
    int index1, index2;
    cin >> index1;
    cin >> index2;
    
    // TODO: כתבו את הקוד שלכם למטה
    // גשו לאיברים באמצעות האופרטור [] והמתודה .at()
    // שמרו את הערכים שאליהם ניגשתם ב-value1 וב-value2
    
    // הציגו את התוצאות
    cout << "Element at index " << index1 << ": " << value1 << endl;
    cout << "Element at index " << index2 << ": " << value2 << endl;
    cout << "First element: " << /* גשו לאיבר הראשון */ << endl;
    cout << "Last element: " << /* גשו לאיבר האחרון באמצעות data.size() - 1 */ << endl;
    
    return 0;
}
quiz iconבחנו את עצמכם

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

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

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