איטרטורי פלט
שיעור 15 מתוך 23 בקורס C++ - ספריית התבניות הסטנדרטית של Coddy.
איטרטור פלט הוא איטרטור המשמש לשינוי הערך במכולה. הוא ההפך הגמור מאיטרטור קלט, והוא מבצע את הפעולה ההפוכה. משתמשים בו כדי להקצות ערכים ברצף, אך אי אפשר להשתמש בו כדי לגשת לערכים האלה.

כפי שאפשר לראות, איטרטור קדימה, איטרטור דו־כיווני ואיטרטור גישה אקראית הם כולם איטרטורי פלט תקפים.
לכן, נלמד על התכונות של איטרטור פלט.
- אופרטור שוויון/אי־שוויון
בניגוד לאיטרטורי קלט, אי אפשר להשוות בין איטרטורי פלט כדי לבדוק אם הם שווים זה לזה. לכן, השוואתם באמצעות האופרטורים==ו-!=תגרום לשגיאה.
A == B // שגוי
A != B // שגוי- ביטול הפניה
השתמשנו בביטול הפניה של איטרטור קלט כדי לגשת לערך של האיבר שאליו האיטרטור מצביע. עם איטרטור פלט, אנו משתמשים באופרטור*כדי לבטל את הפניית האיטרטור, וכך להקצות ערך לאיבר שאליו האיטרטור מצביע.
*A = 10 // בצעו דה־רפרנס באמצעות *vector<int> numbers = {1, 2, 3, 4, 5};
vector<int>::iterator it;
for(it=numbers.begin(); it != numbers.end(); it++)
*it = 10;
for(it = numbers.begin(); it != numbers.end(); it++)
cout << *it << " ";Output:
10 10 10 10 10בדוגמה שלמעלה עברנו על האיברים בווקטור והקצינו לכל איבר את הערך 10 באמצעות איטרטור פלט.
- ניתן להגדלה
אפשר להגדיל איטרטור פלט, כך שלאחר ההגדלה הוא יצביע על האיבר הבא ברצף. לשם כך משתמשים באופרטור++
A++ // אופרטור הגדלה לאחר השימוש בערך
++A // אופרטור הגדלה לפני השימוש בערך- ניתן להחלפה
אפשר להחליף בין שני איטרטורים שמצביעים על מיקומים שונים.
המגבלה היא שאפשר להשתמש באיטרטור פלט כדי להקצות ערך לאיבר שאליו האיטרטור מצביע, אך אי אפשר לגשת לערך הזה, למשל כדי לאחסן את ערך האיבר במשתנה אחר.
*A = x; // תקין
x = *A; // לא תקיןאתגר
בינונינתון מספר N מהקלט שמייצג את מספר האיברים שיהיו בווקטור. ב־N השורות הבאות נתון לך מספר אחד בכל שורה. שמור את כל המספרים בתוך הווקטור. לאחר מכן, השתמש באיטרטור פלט כדי להקצות לכל איבר ערך שיהיה הערך שלו בתוספת אחת, והצג את האיברים ששונו.
Input
5
10
20
30
40
50Output
11 21 31 41 51נסו בעצמכם
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int> numbers;
vector<int>::iterator it;
// Enter your code here
for(it = ; it != numbers.end(); )
{
}
for(it = ; ; )
{
cout << /* Enter here */ << " ";
}
return 0;
}כל השיעורים ביחידה C++ - ספריית התבניות הסטנדרטית
תרגלו בעצמכם: קומפיילר C++ אונליין