I C ++ kan vektoren sløyfes gjennom å bruke den klassiske For-loop med abonnementet (indeksen) i firkantede braketter. Det kan sløyfes gjennom å bruke den rekkebaserte for-staten. Det kan sløyfes gjennom å bruke for_each () -funksjonen inkludert fra algoritmebiblioteket.
Artikkelinnhold
- Looping ved hjelp av den klassiske for-loop
- Looping ved hjelp av den rekkebaserte fortalen
- Looping ved hjelp av for_each () -funksjonen
- Konklusjon
Looping ved hjelp av den klassiske for-loop
Abonnement
Tenk på følgende kodesegment:
vektorUtgangen er 'C'. I den andre uttalelsen, etter vektortavnet, VTR, er de firkantede parentesene. Inne. Indekstelling begynner fra null. Indeksen i koden er 2, som returnerer det tredje elementet i vektoren.
Looping med abonnement
For å sløyfe med abonnement eller iterator, må for-loopen brukes. While-loop eller do-mens Loop kan også brukes, men for-loopen er mest praktisk. Syntaksen til en for-loop er:
for (begynnende_state; while_condition; neste/forrige)Sløyfe fremover
Følgende program bruker en for-loop for å sløyfe fremover, en vektor av tegn (chars), etter abonnement:
#inkludereUtgangen er:
A B C D EVektorbiblioteket må inkluderes for at vektorklasse skal brukes. I C ++ hovedfunksjonen, etter opprettelsen av vektoren er for-loop. Denne for-loop kan oppsummeres som følger: Les hvert element i vektoren som begynner fra indeksen, 0; Og mens enden av vektor ennå ikke er nådd, øker du indeksen med 1 for å lese neste element.
Parentesene til For-loop har logikken om hva du skal lese videre, mens blokken av for-loopen gjør lesing og utskrift på terminalen (konsoll).
Sløyfe fremover og hoppe over
I ovennevnte sløyfe er neste uttalelse i parentesene jeg++. Dette er det samme som:
i = i + 1Med dette blir elementene lest etter hverandre i fremtidens retning. For å lese alle andre elementer (hoppe over ett element hver gang), må det neste argumentet i parentesene være
i = i + 2; som er det samme som i+= 2;Følgende kode leser ut alle andre karakterer:
vektorUtgangen er:
A c eSløyfe bakover
Følgende kode bruker en for-loop for å sløyfe bakover, en vektor av tegn (chars):
int main ()Utgangen er:
E D C B ALoopingen begynner fra den høyeste indeksen (4), som er gitt av:
VTR.størrelse ()-1I dette tilfellet returnerer vektormedlemsfunksjonen, størrelse () 5. 1 må trekkes fra den for å oppnå den høyeste indeksen på 4 (indekstelling begynner fra 0). For å sløyfe bakover, er den forrige uttalelsen i parentesene nå “i-”.
Sløyfe bakover og hopper over
I ovennevnte sløyfe er den forrige uttalelsen jeg-. Dette er det samme som:
i = i - 1Med dette blir elementene lest etter hverandre i motsatt retning. For å lese alle andre elementer (hopper over ett element hver gang) bakover, må den forrige uttalelsen være
i = i - 2; som er det samme som i- = 2;Følgende kode leser ut alle andre karakterer, bakover:
vektorUtgangen er:
E c ahopper over 'd' og 'b'.
Looping ved hjelp av en iteratorklasse
En vektor kan sløyfes med en iterator. Det er seks vektor iteratorklasser. Bare to brukes her. Navnene på de to er: iterator og reverse_iterator. I illustrasjonene her brukes for-loopen fortsatt som loopen.
En iterator er en utdypet peker. For hver iterator er det en klasse som objekter kan bli instantiert. Det instantierte objektet er iteratoren.
Sløyfe fremover
Følgende program bruker en for-loop for å sløyfe fremover, en vektor av tegn (chars), av iterator:
#inkludereUtgangen er:
A B C D EObserver hvordan iteratorobjektet, iterer er blitt erklært. Vektoren har medlemsfunksjonen begynnende (). Dette returnerer en iterator som peker på det første elementet i vektoren. Det er en annen medlemsfunksjon, slutt () for vektoren. Dette returnerer en iterator som peker rett etter det siste elementet i vektoren. Iteratoren som er returnert av enden () er veldig kompatibel med iteratoren som er returnert av Begin (). De er faktisk av samme type, iterator.
I parentesene er begynnelsesstaten:
iter = iter;Midlene for at venstre operand, iter, skal begynne skanning fra der høyre operand, iter peker på.
Denne for-loopen med iteratorer kan oppsummeres som følger: Les hvert element i vektoren som begynner fra det som ITER peker på; Og mens enden av vektor ennå ikke er nådd, øker iteratoren, iter, for å peke på neste element for å lese neste element.
Kroppen til for-loop er:
char ch = *iter;Stjerne i denne stillingen, er en indireksjonsoperatør. Den oppnår verdien som er pekt på, av iteratoren
Sløyfe fremover og hoppe over iterator
I ovennevnte sløyfe er neste argument++. Dette er det samme som:
iter = iter + 1Pluss-en med iteratoren, betyr pek på neste element. Det betyr ikke, legg til heltall 1, i iteratoren. Med dette blir elementene lest etter hverandre i fremtidens retning. For å lese alle andre elementer (hoppe over ett element hver gang), må neste argument være
iter = iter + 2; som er det samme som iter+= 2;Følgende kode leser ut alle andre karakterer:
vektorUtgangen er:
A c eHopp over 'B' og 'D'.
Sløyfe bakover
Følgende kode bruker en for-loop for å sløyfe bakover, en vektor av tegn (chars), ved hjelp av iteratorer:
int main ()Utgangen er:
E D C B AReverse_iterator har blitt brukt her. Vektoren har en tilsvarende medlemsfunksjon, rbegin (), som returnerer en iterator som peker på det siste elementet i vektoren. Det er en annen medlemsfunksjon, Rend (), som returnerer en iterator som peker rett før det første elementet i vektoren.
For å sløyfe bakover, er den forrige uttalelsen i parentesene fremdeles ironisk nok, "ITER ++". Og mens-betingelsen, fremdeles ironisk nok har '<'.
Sløyfe bakover og hopper over
I ovennevnte sløyfe er den forrige uttalelsen, iter++. Dette er det samme som
iter = iter + 1Med dette blir elementene lest etter hverandre i motsatt retning. For å lese hvert ordreelement (hoppe over ett element hver gang) bakover, må den forrige uttalelsen være
iter = iter + 2; som er det samme som iter+= 2;Følgende kode leser ut alle andre tegn bakover:
vektorUtgangen er:
E c ahopper over 'd' og 'b'.
Looping ved hjelp av den rekkebaserte fortalen
Den rekkeviddebaserte formatingen er en mer praktisk uttalelse å bruke for å sløyfe gjennom en liste, for eksempel en vektor. Det brukes egentlig ikke til å hoppe over eller sløyfe bakover. Syntaksen er:
for (init-statement-Optional for-range-DECLARASION: for-range-initializer) uttalelseDenne gangen er det to uttalelser i parentesene og ikke tre. Den første uttalelsen er erklæringen om en variabel som holder neste element i vektoren. Denne variabelen må være av samme type som typen vektorelementer. Det andre argumentet etter tykktarmen er navnet på vektoren.
Følgende kode viser hvordan den kan brukes:
vektorUtgangen er:
A B C D ELooping ved hjelp av for_each () -funksjonen
For_each () -funksjonen brukes fra det inkluderte algoritmebiblioteket. Syntaksen er:
malDet første argumentet er en iterator som peker på det første elementet i vektoren. Det andre argumentet er en iterator som peker rett etter det siste elementet i vektoren. Det tredje argumentet er navnet på en funksjon, hvis kropp er det som vil være i den klassiske for-loopen. Denne funksjonen har en parameter, og det er erklæringen om variabelen som vil inneholde neste verdi av vektoren. Det må være av samme type som hvert element i vektoren. Denne for_each () -funksjonen brukes egentlig ikke til å hoppe over eller sløyfe bakover.
Følgende program viser hvordan du bruker for_each () funksjonsanrop, og en tilhørende funksjonsdefinisjon:
#inkludereUtgangen er:
A B C D EKonklusjon
Å sløyfe gjennom en vektor, betyr å få tilgang til alle elementene i vektoren, fra begynnelse til slutt, eller fra slutten til begynnelsen. Elementene kan nås for lesing eller skriving (endre verdi) eller begge deler.
I C ++ kan vektoren sløyfes gjennom ved å bruke den klassiske For-loop, med abonnementet (indeksen) i firkantede parenteser; Det kan sløyfes ved å bruke den rekkevidde-baserte for-staten; Det kan også sløyfes gjennom å bruke for_each () -funksjonen inkludert fra algoritmebiblioteket.