Wytłumaczenie zastosowania i używania iteratorów w C++

0

Witam.
Chciałem się spytać, jakie zastosowanie mają iteratory w C++?
Mam taki kod w którym nie rozumiem po co są tworzone, używane iteratory:

#include<iostream>
#include<vector>
using namespace std;
int main(){
	vector<int>tab(20);
	vector<int>::iterator pierwszy_element=tab.begin();
	vector<int>::iterator ostatni_element=tab.end();
	vector<int>::iterator dziesiaty_element=pierwszy_element+=9;
	*dziesiaty_element=10;
	for(vector<int>::iterator i=tab.begin();i!=tab.end();i++){
		cout<<*i;
	}
	tab.clear();
	return 0;
}

Dlaczego kod nie przejdzie bez tego kawałka kodu?:

::iterator

I co to jest ten znak ::? Gdzieś go już widziałem, ale nie wiem gdzie. Konstruktor jakiś czy jakoś tak to się nazywało?

1

Iteratory pierwszy_element,ostatni_element są tworzone bez sensu i nie są używane.
Iterator dziesiaty_element jest tworzony i używany bez sensu (jedyny sens - dydaktyczny) w tym fragmencie kodu.
Kod nie przejdzie bez ::iterator z tej samej przyczyny z jakie kod int x; nie przejdzie bez nt - jst to część typu.
Ze znakiem zapytania którego brak w podanym kodzie - jest to operator trójargumentowy - znajdziesz w google.

2

To jest kwalifikator dostępu. Mówi tyle że coś sie znajduje w danej przestrzeni nazw.

0
adrian.widzew napisał(a):

Chciałem się spytać, jakie zastosowanie mają iteratory w C++?

Prosty przykład: chcesz przejść po wszystkich elementach kontenera i coś z nimi zrobić, powiedzmy wywołać f(element). Jeśli to jest std::vector, to możesz to łatwo zrobić nawet bez iteratora (choć niepolecane):

vector<int> myInts;
... // operacje na tym, np. dodawanie elementów
for (size_t i = 0; i < myInts.size(); ++i) {
    f(myInts[i]);
}

Natomiast jeśli masz kontener asocjacyjny np. std::set, to już nie możesz tak lecieć po nim. Najprostszym (nie wiem czy jedynym) sposobem jest właśnie używanie iteratorów:

set<int> myInts;
... // operacje itd.
for (set<int>::const_iterator it = myInts.begin(); it != myInts.end(); ++it) {
    f(*it);
}

Zauważ, że ta pętla for pozostanie taka sama jeśli zmienisz kontener z set na vector czy cokolwiek innego, co ma zdefiniowane iteratory.

1 użytkowników online, w tym zalogowanych: 0, gości: 1