Što je vektorski iterator?

Vektorski iterator je konstrukcija računalnog jezika koja omogućuje programu čitanje vrijednosti podataka sadržanih u specijaliziranoj kolekciji zvanoj vektor. Vektori su objekti koji se koriste za grupiranje povezanih vrijednosti podataka, slično nizovima i listama. Mnogi različiti računalni jezici, ponajviše Java i C++, sadrže vektore i njihove povezane iteratore. Svaki jezik koristi drugačiju sintaksu za iteratore, ali temeljni mehanizam u svim jezicima je individualni pristup svakom mogućem članu vektorske grupe.

Kretanje kroz vektor pomoću iteratora često se naziva prelaskom ili iteracijom. Vektorski iteratori se također mogu koristiti za eksplicitnu identifikaciju određenog objekta u kolekciji vektora. Kada se ova identifikacija izvrši, objekt se identificira po indeksu u vektoru, a ne po bilo kojim karakteristikama samog objekta. Radnje se mogu izvesti na objektu ako je iterator dereferenciran, dopuštajući programu eksplicitni pristup objektu, a ne vektoru.

Vektorski iteratori imaju vrlo male šanse da naiđu na pogreške izvan granica koje se mogu dogoditi tijekom ponavljanja nizova. Iako su vektori u suštini glorificirani nizovi kada se dekonstruiraju, vektori gotovo uvijek imaju neku vrstu provjere granica koja osigurava da vektorski iterator ostane na odgovarajućim indeksima. Prilikom prelaska vektora, iterator, ako je ispravno pozvan, uvijek počinje na početku vektora i završava točno na kraju. Eksplicitna specifikacija netočnog indeksa još uvijek je moguća u određenim kontekstima, ali ugrađena provjera granica vektora, koja se prevodi u njihove iteratore, sprječava probleme s prekoračenjem izvan granica.

U C++, vektori se mogu mijenjati dok ih prelaze iteratori, ali Java to izričito zabranjuje. Javine akcije u ovoj su okolnosti mnogo sigurnije jer promjena vektora dok se iterator kreće po njemu može uzrokovati da iterator nehotice čita izvan vektora. Pokušaj dodavanja ili uklanjanja stavki iz vektora tijekom ponavljanja je posebno opasan, osobito ako su početni i završni indeksi koje vektor mora pokriti tvrdo kodirani. Vektorski iterator nije opremljen za rukovanje iznenadnim promjenama vektora, a vektori bi trebali biti relativno statični dok se prelaze.

Vektorski iterator može biti implicitan ili eksplicitan, a bilo koji sintaktički oblik izvodi prelazak jednako glatko. Unatoč tome što je kodiran za učinkovitost, vektorski iterator može biti usporen vrlo velikim vektorom. U ovom slučaju, tvrdo kodiranje krajnjeg indeksa vektora ubrzava prelaske. Ovaj problem se ne pojavljuje s malim vektorima, tako da tvrdo kodiranje krajnjeg indeksa ne uzrokuje značajno ubrzanje. Tvrdo kodiranje završnog indeksa može povećati rizik od prelijevanja, pa ga općenito treba činiti štedljivo.