Mis on vektoriteraator?

Vektoriteraator on arvutikeele konstruktsioon, mis võimaldab programmil lugeda andmeväärtusi, mis sisalduvad spetsiaalses kogus, mida nimetatakse vektoriks. Vektorid on objektid, mida kasutatakse seotud andmeväärtuste rühmitamiseks sarnaselt massiivide ja loenditega. Paljud erinevad arvutikeeled, eriti Java ja C++, sisaldavad vektoreid ja nendega seotud iteraatoreid. Iga keel kasutab iteraatorite jaoks erinevat süntaksit, kuid kõigi keelte aluseks on individuaalne juurdepääs vektorirühma igale võimalikule liikmele.

Iteraatori abil läbi vektori liikumist nimetatakse sageli läbimiseks või iteratsiooniks. Vektoriteraatoreid saab kasutada ka konkreetse objekti selgeks tuvastamiseks vektorikogus. Selle tuvastamise korral tuvastatakse objekt selle indeksi järgi vektoris, mitte objekti enda omaduste järgi. Objektiga saab toiminguid teha, kui iteraatorile viidatakse, võimaldades programmile selgesõnalise juurdepääsu objektile, mitte vektorile.

Vektoriteraatoritel on väga väike võimalus sattuda piiridest väljapoole tõrkeid, mis võivad massiivide itereerimisel juhtuda. Kuigi vektorid on dekonstrueerimisel põhiliselt ülistatud massiivid, kontrollivad vektorid peaaegu alati teatud tüüpi piire, mis tagavad, et vektori iteraator jääb õigetele indeksitele. Vektori läbimisel algab iteraator, kui seda õigesti kutsuda, alati vektori algusest ja lõpeb täpselt selle lõpus. Vale indeksi selgesõnaline täpsustamine on teatud kontekstides endiselt võimalik, kuid vektorite sisseehitatud piiride kontroll, mis tõlgitakse nende iteraatoriteks, hoiab ära piiridest väljumise.

C++ puhul saab iteraatorite läbimise ajal vektoreid muuta, kuid Java keelab selgesõnaliselt selle juhtumise. Java toimingud on sellisel juhul palju turvalisemad, kuna vektori muutmine sel ajal, kui iteraator sellel liigub, võib põhjustada iteraatori kogemata lugemise väljaspool vektorit. Itereerimise ajal vektorile üksuste lisamise või eemaldamise katse on eriti ohtlik, eriti kui algus- ja lõppindeksid, mida vektor peab katma, on kõvasti kodeeritud. Vektoriteraator ei ole varustatud äkiliste vektorite muutustega toimetulekuks ja vektorid peavad olema läbimise ajal suhteliselt staatilised.

Vektoriteraator võib olla kaudne või eksplitsiitne ning kumbki süntaktiline vorm jookseb läbimise sama sujuvalt. Vaatamata sellele, et vektori iteraatorit on tõhususe tagamiseks kodeeritud, saab seda aeglustada väga suur vektor. Sel juhul kiirendab vektori lõpuindeksi kõva kodeerimine läbimist. Väikeste vektorite puhul seda probleemi ei esine, seega ei põhjusta lõppindeksi kõva kodeerimine märgatavat kiirust. Lõppindeksi kõva kodeerimine võib suurendada ületäitumise ohtu, nii et üldiselt tuleks seda teha säästlikult.