Menu
Coddy logo textTech

Iteratory wejściowe

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

Iterator wejściowy to iterator używany do odczytywania wartości z kontenera. Iteratory wejściowe są „najsłabszymi” ze wszystkich iteratorów, ponieważ mają ograniczoną funkcjonalność. Dzięki temu są jednak proste i łatwe do zrozumienia.
Są używane głównie w sekwencyjnych operacjach wejściowych, w których iterator wskazuje każdą wartość tylko raz, a następnie jest zwiększany, najczęściej za pomocą operatora ++, aby przesunąć iterator o jeden element.

Jak widać, iterator jednokierunkowy, iterator dwukierunkowy i iterator swobodnego dostępu są poprawnymi iteratorami wejściowymi.


Przyjrzyjmy się więc cechom iteratora wejściowego.


  • Operator równości/nierówności
    Iterator wejściowy można porównywać za pomocą operatora równości lub nierówności. Dwa iteratory są równe tylko wtedy, gdy oba wskazują to samo miejsce. 
A == B // Równość
A != B // Nierówność

Zobaczmy przykład, w którym sprawdzimy, czy dwa iteratory wskazują to samo miejsce.

vector<int> numbers = {1, 2, 3, 4, 5};
vector<int>::iterator it1, it2;

it1 = numbers.begin();
it2 = numbers.begin() + 1;

if(it1 == it2)
	cout << "Both iterators are equal.";
else
	cout << "Both iterators are not equal.";
Output:
Both iterators are not equal.

W powyższym przykładzie deklarujemy iteratory o nazwach it1 i it2, używając vector<int>::iterator. Następnie przypisujemy im wartości. Iterator it1 wskazuje miejsce pierwszego elementu dzięki metodzie begin(). Iterator it2 wskazuje miejsce drugiego elementu, ponieważ zwiększyliśmy wartość zwracaną przez metodę begin() o jeden. Dlatego wynik programu informuje, że te dwa iteratory nie wskazują tego samego miejsca.


  • Wyłuskiwanie
    Iterator wejściowy można wyłuskać za pomocą operatora *. Jeśli wyświetlimy wyłuskaną wartość iteratora, otrzymamy rzeczywistą wartość elementu, na który wskazuje iterator.
*A // Wyłuskaj wartość za pomocą *
vector<int> numbers = {1, 2, 3, 4, 5};
vector<int>::iterator it1, it2;

it1 = numbers.begin();
it2 = numbers.begin() + 1;

cout << *it1 << endl;
cout << *it2;
Output:
1
2

W powyższym przykładzie mamy dokładnie taką samą sytuację jak w pierwszym przykładzie. Iterator it1 wskazuje pierwszy element wektora, a iterator it2 wskazuje drugi element wektora. Gdy wyświetlimy wyłuskane wartości iteratorów, otrzymamy rzeczywiste wartości pierwszego i drugiego elementu wektora.
Jeśli więc chcemy wyświetlić wartość zmiennej lub elementu, na który wskazuje iterator, używamy operatora *.


  • Możliwość zwiększania
    Iterator wejściowy można zwiększyć, dzięki czemu po zwiększeniu będzie wskazywał następny element w sekwencji. W tym celu używamy operatora ++.
A++ // Operator postinkrementacji
++A // Operator preinkrementacji
vector<int> numbers = {1, 2, 3, 4, 5};
vector<int>::iterator it1;

it = numbers.begin();
cout << "First value is: " << *it << " ";

it++;
cout << "Second value is: " << *it << " ";

++it;
cout << "Third value is: " << *it;
Output:
1 2 3

W powyższym przykładzie deklarujemy iterator it, który wskazuje pierwszy element wektora. Wyświetlamy pierwszy element wektora, a następnie zwiększamy iterator o jeden, aby wskazywał drugi element, i tak dalej.


  • Możliwość zamiany
    Można zamienić miejscami dwa iteratory wskazujące różne miejsca. Możemy to zrobić za pomocą zmiennej tymczasowej, jak poniżej.
vector<int> numbers = {1, 2, 3, 4, 5};
vector<int>::iterator it1, it2, temp;

it1 = numbers.begin();
it2 = numbers.begin() + 1;

cout << *it1 << " " << *it2 << endl;

temp = it1;
it1 = it2;
it2 = temp;

cout << *it1 << " " << *it2 << endl;
Output:
1 2
2 1

W powyższym przykładzie deklarujemy dwa iteratory i przypisujemy pierwszemu iteratorowi miejsce pierwszego elementu, a drugiemu iteratorowi miejsce drugiego elementu. Wyświetlamy oba elementy, a następnie zamieniamy wartości iteratorów. W rezultacie pierwszy iterator wskazuje drugi element, a drugi iterator wskazuje pierwszy element, co widać w wyniku.

challenge icon

Wyzwanie

Średni

Dla 5 liczb podanych na wejściu użyj wektora i zapisz wartości. Następnie użyj iteratora z metodą begin() i przejdź przez wektor, zwiększając iterator przy każdej iteracji pętli.

 

Input
10
20
30
40
50
Output
10 20 30 40 50

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(); )
    {
        
    }

    return 0;
}

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

Poćwicz samodzielnie: Kompilator C++ online