Video: You can learn Arduino in 15 minutes. 2025
C ++ programmereren iterates gjennom en matrise ved å gi indeksen til hvert element. Denne teknikken fungerer imidlertid ikke for containere som liste som ikke tillater tilfeldig tilgang. Man kan forestille seg en løsning basert på metoder som getFirst () og getNext () ; men designerne av Standard Template Library ønsket å gi en felles metode for å krysse enhver type container.
For dette definerer standardmallbiblioteket iteratoren.
En iterator er et objekt som peker på medlemmene av en beholder. Generelt støtter hver iterator følgende funksjoner:
-
En klasse kan returnere en iterator som peker til det første medlemmet i samlingen.
-
Iteratoren kan flyttes fra ett medlem til det neste.
-
Iteratoren returnerer en indikasjon når den når slutten av listen.
-
Programmet kan hente elementet påpekt av iteratoren.
Standardmallabiblioteket gir også omvendte iteratorer for å bevege seg bakover gjennom lister. Alt her om iteratorer gjelder også for omvendte iteratorer.
Koden som er nødvendig for å iterere gjennom en liste , er forskjellig fra det som er nødvendig for å krysse en vektor (for å nevne bare to eksempler). Imidlertid skjuler iteratoren disse detaljene.
Metoden begynner () returnerer en iterator som peker til det første elementet i en liste. Indirection operator * () henter en referanse til objektet peket på av iteratoren. Operatøren ++ flytter iteratoren til neste element i listen.
Et program fortsetter å øke sin vei gjennom listen til iteratoren er lik verdien som returneres av slutten () . Følgende kodestykke starter i begynnelsen av en liste over studenter og viser hvert av navnene sine:
void displayStudents (liste og studenter) {// allokere en iterator som peker til det første // elementet i listelisten:: iterator iter = studenter. begynne(); // fortsett å gå gjennom listen til // iteratoren treffer slutten av listen mens (iter! = students. end ()) {// henter Student iteratoren peker på Student & s = * iter; cout << s. sName << endl; // flytt nå iseratoren til neste element // i listen iter ++;}}
Erklæringer for iteratorer kan bli svært komplekse. Dette er sannsynligvis den beste begrunnelsen for auto -deklarasjonen introdusert med '11 standard:
for (auto iter = studenter. Begynn (); iter! = Studenter. Ende (); iter ++) {coutDette erklærer iter å være en iterator av hvilken type som returneres av metodelisten:: start () , unngår de torturerte deklarasjonene som vises i den tidligere kodestykket.Hvor kult er det!
