Menu
Coddy logo textTech

Iteratory wyjściowe

Lekcja 15 z 23 w kursie C++ – Standardowa biblioteka szablonów w Coddy.

Iterator wyjściowy to iterator używany do modyfikowania wartości w kontenerze. Jest dokładnym przeciwieństwem iteratorów wejściowych i pełni odwrotną funkcję. Służy do przypisywania wartości w sekwencji, ale nie można go używać do uzyskiwania dostępu do tych wartości. 

Jak widać, iterator jednokierunkowy, iterator dwukierunkowy i iterator swobodnego dostępu są prawidłowymi iteratorami wyjściowymi.


Omówimy więc właściwości iteratora wyjściowego.


  • Operator równości/nierówności
    W przeciwieństwie do iteratorów wejściowych iteratorów wyjściowych nie można porównywać pod kątem równości. Dlatego porównywanie ich za pomocą operatorów == i != spowoduje błąd.
A == B // Źle
A != B // Źle

  • Wyłuskiwanie
    Wyłuskiwaliśmy iterator wejściowy, aby uzyskać dostęp do wartości elementu, na który wskazuje iterator. W przypadku iteratora wyjściowego używamy operatora *, aby wyłuskać iterator i przypisać wartość elementowi, na który wskazuje iterator.
*A = 10 // Dereferencja za pomocą *
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

 W powyższym przykładzie przeszliśmy pętlą przez wektor i przypisaliśmy każdemu elementowi wartość 10 za pomocą iteratora wyjściowego.


  • Możliwość inkrementacji
    Iterator wyjściowy można inkrementować, dzięki czemu po inkrementacji będzie wskazywał następny element sekwencji. Używamy do tego operatora ++
A++ // Operator postinkrementacji
++A // Operator preinkrementacji

  • Możliwość zamiany
    Można zamienić miejscami dwa iteratory wskazujące różne miejsca.

Ograniczenie polega na tym, że iteratora wyjściowego można użyć do przypisania wartości elementowi, na który wskazuje iterator, ale nie można uzyskać dostępu do tej wartości, aby na przykład zapisać wartość elementu w innej zmiennej.

*A = x; // Poprawne
x = *A; // Niepoprawne
challenge icon

Wyzwanie

Średni

Otrzymujesz z wejścia liczbę N oznaczającą liczbę elementów, które będzie zawierał wektor. W kolejnych N wierszach otrzymujesz po jednej liczbie. Zapisz wszystkie liczby w wektorze. Następnie użyj iteratora wyjściowego, aby przypisać każdemu elementowi wartość zwiększoną o jeden, i wypisz zmodyfikowane elementy.

 

Input
5
10
20
30
40
50
Output
11 21 31 41 51

Spróbuj swoich sił

#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;
}

Wszystkie lekcje w sekcji C++ – Standardowa biblioteka szablonów

Poćwicz samodzielnie: Kompilator C++ online