odwrotny iterator prośba o wytłumaczenie

0

Witam.
Chciałbym prosić o wytłumaczenie mi co to jest iterator odwrotny bo nie bardzo rozumiem jak może być odwrotny.
Gdy korzystam z iteratora do przejścia od początku do końca kontenera takiego jak np. vector to w pętli for możemy zapisać coś takiego:

for(vector<int>::iterator it = wektor.begin(); it != wektor.end(); it++)

Przechodzimy od początku vectora do jego końca przy pomocy iteratora.
A jak jest w tym przypadku?

for(vector<int>::iterator it = wektor.rbegin(); it != wektor.rend(); it++)

Czy chodzi tu o to że rbegin() to to samo co end(), a rend() jest jednoznaczne z begin(), i przechodzimy tak naprawdę od końca do początku kontenera?
Bo czegoś w tym rodzaju się nie da:

for(vector<int>::iterator it = wektor.end(); it != wektor.begin(); it++)

Jeżeli dobrze zrozumiałem, to pytanie po co jest coś takiego skoro można przez kontener przejść od początku do końca i wyjdzie to samo.

1

iterator.end() nie wskazuje na żaden element. podobnie iterator.rend() (też nie wskazuje na nic). ani od jednego, ani od drugiego nie można zacząć iterowania.

0

A na cpp0x.pl jest że vector:🔚
"Metoda zwraca iterator swobodnego dostępu wskazujący na element będący za ostatnim elementem znajdującym się w kontenerze. Zwracany iterator wskazuje na nieistniejący element w związku z czym nie należy odczytywać ani modyfikować elementu na który wskazuje iterator.
"
Czyli jednak wskazuje na jakiś element. Tyle że na element który nie istnieje

0

Czyli tak jakby rend() to begin()-1 a end()-1 to rbegin().
Tak jakby elementy kontenera były od begin() do rbegin() włącznie.
Ale z tego co sprawdziłem nie da rady napisać pętli od begin() do rbegin().

Ale i tak po co od rbegin() przeglądać kontener do rend(), skoro to samo wyjdzie przy przeglądaniu od begin() do end().

1

No nie da rady, bo iterator i reverse_iterator to inne typy. Nie da się napisać też pętli od 0 do "dupa8".
ad2) Czasem chcesz przeglądać kontener od końca, nie zrobisz tego od end do begin. To znaczy da się, ale to kompletnie bez sensu.

2

Możesz wyłuskiwać iterator z reverse_iterator wołając na nim metodę base() i w ten sposób dokonywać porównania.

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