Co je to vektorový iterátor?
Iterátor vektoru je konstrukt počítačového jazyka, který umožňuje programu číst hodnoty dat obsažených ve specializované sbírce nazvaném vektor. Vektory jsou objekty používané pro hodnoty souvisejících se seskupováním dat, podobně jako polí a seznamy. Mnoho různých počítačových jazyků, zejména Java a C ++, obsahuje vektory a jejich související iterátory. Každý jazyk používá pro iterátory odlišnou syntaxi, ale základní mechanismus ve všech jazycích je individuální přístup ke každému možnému členu vektorové skupiny. Vektorové iterátory lze také použít k výslovnému identifikaci konkrétního objektu ve vektorové sbírce. Když je tato identifikace provedena, objekt je identifikován jeho indexem ve vektoru, nikoli podle vlastností samotného objektu. Akce lze provést na objektu, pokud je iterátor dereferencován, a poskytnout program explicitní přístup k objektu spíše než vektor.
Vektorové iterátoři mají velmi malou šanci na setkání s chybami mimo hranice, ke kterým může dojít při iteraci po poli. Přestože jsou vektory v podstatě oslavené pole po dekonstrukci, vektory mají téměř vždy nějaký typ hranic, které zajišťují, že vektorový iterátor zůstává ve správných indexech. Při procházení vektorem iterátor, pokud je volán správně, vždy začíná na začátku vektoru a končí přesně na konci. V určitých kontextech je stále možná explicitní specifikace nesprávného indexu, ale vestavěné hranice vektorů, které se promítá do jejich iterátorů, zabraňují problémům s přetečením hranic.
V C ++ mohou být vektory upraveny při procházení iterátory, ale Java to výslovně zakazuje. Akce Java za těchto okolností jsou mnohem bezpečnější, protože změna vektoru, zatímco iterátor se pohybuje na něm, může způsobit iterátor to neúmyslně číst mimo vektor. Pokus o přidání nebo odstranění položek z vektoru při iteraci je obzvláště nebezpečný, zejména pokud jsou indexy počátečního a koncového vektoru pokryté pevně kódovány. Vektorový iterátor není vybaven pro zvládnutí náhlých změn vektorů a vektory mají být při procházení relativně statické.
Iterátor vektoru může být implicitní nebo explicitní a buď syntaktická forma vede traverzální stejně hladce. Přestože je vektorový iterátor kódován pro účinnost, může být zpomalen velmi velkým vektorem. V tomto případě pevné kódování koncového indexu vektoru zrychluje traversy. K tomuto problému nedochází u malých vektorů, takže pevné kódování koncového indexu nezpůsobuje žádné značné zrychlení. Pevné kódování konečného indexu může zvýšit riziko přetečení, takže obecně by to mělo být provedeno střídmě.