Vad är en vektorterator?
En vektor iterator är en datorspråkskonstruktion som gör att ett program kan läsa datavärden 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, särskilt Java och C ++, innehåller vektorer och relaterade iteratorer. Varje språk använder olika syntax för iteratorerna, men den underliggande mekanismen på alla språk är individuell åtkomst till varje möjlig medlem av vektorgruppen.
Att röra sig genom en vektor med hjälp av en iterator kallas ofta traversing eller iterating. Vector iteratorer kan också användas för att uttryckligen identifiera ett visst objekt i vektorsamlingen. När denna identifiering utförs identifieras objektet genom dess index i vektorn, inte av några egenskaper hos själva objektet. Åtgärder kan utföras på objektet om iteratorn avlägsnas, vilket ger programmet uttrycklig åtkomst till objektet snarare än vektorn.
Vector iteratorer har väldigt liten chans att möta fel utanför gränserna som kan hända när de upprepas över matriser. Även om vektorer är väsentligen förhärligade matriser när de dekonstrueras, har vektorer nästan alltid någon typ av gränskontroll som säkerställer att en vektor-iterator förblir på rätt index. När man korsar en vektor börjar iteratorn, om den kallas korrekt, alltid i början av vektorn och slutar exakt i slutet. Explicit specifikation av ett felaktigt index är fortfarande möjligt i vissa sammanhang, men den inbyggda gränskontrollen av vektorer, som översätter till deras iteratorer, förhindrar problem med överflöd.
I C ++ kan vektorer modifieras medan de korsas av iteratorer, men Java förbjuder uttryckligen att detta sker. Javas handlingar i detta fall är mycket säkrare eftersom att byta en vektor medan en iterator rör sig på den kan göra att iteratorn av misstag läser utanför vektorn. Att försöka lägga till eller ta bort objekt från en vektor medan iterering är särskilt farligt, särskilt om start- och slutindex som vektorn måste täcka är hårdkodade. En vektor-iterator är inte utrustad för att hantera plötsliga förändringar i vektorer, och vektorer är tänkta att vara relativt statiska medan de korsas.
En vektor iterator kan vara implicit eller uttrycklig, och antingen syntaktisk form kör traversalen lika smidigt. Trots att den är kodad för effektivitet kan en vektor-iterator bromsas med en mycket stor vektor. I detta fall snabbar hårdkodning av slutindex för vektorn genomgående. Detta problem uppstår inte med små vektorer, så hårdkodning av slutindex orsakar inte någon märkbar hastighet. Hårkodning av slutindex kan öka risken för överflöd, så i allmänhet bör det göras sparsamt.