גישה לאיברים
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-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() מספק הגנה נוספת מפני גישה למיקומים לא תקינים בווקטור שלך.
אתגר
קלצרו תוכנית שמדגימה גישה לאיברים ב־vector על ידי שליפת איברים ספציפיים מ־vector באמצעות אופרטור הסוגריים המרובעים וגם באמצעות המתודה .at().
הקלטים הבאים יסופקו:
- מספר שלם
nהמייצג את מספר האיברים ב־vector - לאחר מכן
nמספרים שלמים שימלאו את ה־vector - מספר שלם
index1המייצג את האינדקס הראשון שאליו יש לגשת - מספר שלם
index2המייצג את האינדקס השני שאליו יש לגשת
התוכנית שלכם צריכה:
- ליצור
std::vector<int>בשםdata - להשתמש ב־
push_back()כדי להוסיף ל־vector כל אחד מ־nהמספרים שבקלט - לגשת לאיבר שב־
index1באמצעות אופרטור הסוגריים המרובעים[]ולשמור אותו במשתנה בשםvalue1 - לגשת לאיבר שב־
index2באמצעות המתודה.at()ולשמור אותו במשתנה בשםvalue2 - להדפיס את הערכים שאליהם ניגשתם ואת האינדקסים המתאימים להם
- להדפיס את האיבר הראשון והאחרון ב־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;
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מצביעים וזיכרון
מהו מצביע?אופרטור קבלת כתובתאופרטור ביטול הפניהמצביעי Nullמצביעים ומערכיםזיכרון דינמי באמצעות 'new'שחרור זיכרון באמצעות 'delete'סיכום — תרגול מצביעים2וקטורים (מערכים דינמיים)
היכרות עם std::vectorיצירת וקטורהוספת איבריםגישה לאיבריםגודל הווקטורמעבר על איברים באמצעות לולאת forלולאת for מבוססת טווחהסרת איבריםסיכום — פעולות על וקטורים5פרויקט: כלי לניהול מלאי
הגדרת הפרויקטהוספה ועדכון של פריטיםתרגלו בעצמכם: קומפיילר C++ אונליין