2013-08-29 14 views
6

mam jakąś funkcjęPrzechodząc iterator i grafika do funkcji

void print_elem(const std::vector<int>::iterator it, const std::vector<int> &vec) {/*.....*/} 

Jeśli wyjadę, że wektor jest odwołanie do oryginalnego obiektu, mam kopie wektora. Dlaczego to samo dotyczy iteratora? Dlaczego iterator również nie musi być referencją?

Na przykład, jeśli chciałbym iterować w wektorze, wydrukować każdy element i chciałbym przestać, gdy uderzę w koniec wektora, chyba że przekażę odniesienie do wektora, iteracja tylko ciągle przechodzi przez pierwszą kopię wektorową. Ale jeśli przejdę przez referencję, iteracja przechodzi przez oryginalny obiekt wektorowy. Ale dlaczego iterator nie jest kopiowany tak jak wektor bez odniesienia?

Odpowiedz

10

Iterator modeluje wskaźnik i najprawdopodobniej jest to lub lub zawiera taki, który wskazuje na wektor lub jego zawartość. Podczas kopiowania kopia jest w rzeczywistości innym iteratorem, ale przechowuje tę samą wartość, więc nadal wskazuje na to samo, tak jak wskaźnik.

+0

Czy to nieistotne, aby przekazać iterator jako argument odniesienia? Warto pamiętać o przejściu przez iterator, ponieważ odwołanie do funkcji powoduje błąd; ale nie jest tak, gdy jest to const_iterator. Czy zdajesz sobie sprawę, dlaczego? Jaka jest różnica, która powoduje, że to ostatnie nie jest błędem? -Dzięki. – jlstr