Menu
Coddy logo textTech

איטרטורי פלט

שיעור 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; // לא תקין
challenge icon

אתגר

בינוני

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

 

Input
5
10
20
30
40
50
Output
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++ אונליין