Vad är en Vector Iterator?

En vektoriterator är en datorspråkkonstruktion som gör att ett program kan läsa datavärden som finns i en specialiserad samling som kallas en vektor. Vektorer är objekt som används för att gruppera relaterade datavärden, liknande arrayer och listor. Många olika datorspråk, framför allt Java och C++, innehåller vektorer och deras relaterade iteratorer. Varje språk använder olika syntax för iteratorerna, men den underliggande mekanismen på alla språk är individuell tillgång till varje möjlig medlem av vektorgruppen.

Att förflytta sig genom en vektor med hjälp av en iterator kallas ofta för att korsa eller iterera. Vektoriteratorer kan också användas för att explicit identifiera ett visst objekt i vektorsamlingen. När denna identifiering utförs identifieras objektet av dess index i vektorn, inte av några egenskaper hos själva objektet. Åtgärder kan utföras på objektet om iteratorn avrefereras, vilket ger programmet explicit åtkomst till objektet snarare än vektorn.

Vektoriteratorer har mycket liten chans att stöta på de out of bounds-fel som kan hända när de itererar över arrayer. Även om vektorer i huvudsak är glorifierade arrayer när de dekonstrueras, har vektorer nästan alltid någon typ av gränskontroll som säkerställer att en vektoriterator förblir vid rätt index. När man korsar en vektor börjar iteratorn, om den anropas korrekt, alltid i början av vektorn och slutar i exakt slutet. Explicit specificering av ett felaktigt index är fortfarande möjligt i vissa sammanhang, men den inbyggda gränskontrollen av vektorer, vilket översätts till deras iteratorer, förhindrar överflödesproblem utanför gränserna.

I C++ kan vektorer modifieras medan de korsas av iteratorer, men Java förbjuder uttryckligen att detta sker. Javas handlingar i denna omständighet är mycket säkrare eftersom att ändra en vektor medan en iterator rör sig på den kan göra att iteratorn oavsiktligt läser utanför vektorn. Att försöka lägga till eller ta bort objekt från en vektor under iteration är särskilt farligt, särskilt om start- och slutindexen som vektorn måste täcka är hårdkodade. En vektoriterator är inte utrustad för att hantera plötsliga förändringar i vektorer, och vektorer är avsedda att vara relativt statiska medan de korsas.

En vektoriterator kan vara implicit eller explicit, och båda syntaktiska formerna löper genomgången lika smidigt. Trots att den är kodad för effektivitet kan en vektoriterator bromsas av en mycket stor vektor. I det här fallet gör hårdkodning av vektorns slutindex snabbare genomgångar. Detta problem uppstår inte med små vektorer, så hårdkodning av slutindexet orsakar inte någon nämnvärd hastighet. Hårdkodning av slutindex kan öka risken för översvämning, så i allmänhet bör det göras sparsamt.