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
2W 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 preinkrementacjivector<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 3W 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 1W 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.
Wyzwanie
ŚredniDla 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
50Output
10 20 30 40 50Spró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
7Podsumowanie
Podsumowanie kursu5Iteratory
IteratoryIteratory wejścioweIteratory wyjścioweIteratory jednokierunkoweIteratory dwukierunkowePoćwicz samodzielnie: Kompilator C++ online