Sløyfe gjennom en vektor i C ++

Sløyfe gjennom en vektor i C ++
Å 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 å 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:

vektor vtr = 'a', 'b', 'c', 'd', 'e';
char ch = vtr [2];
cout << ch << endl;

Utgangen 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)
// uttalelser

Sløyfe fremover

Følgende program bruker en for-loop for å sløyfe fremover, en vektor av tegn (chars), etter abonnement:

#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

vektor vtr = 'a', 'b', 'c', 'd', 'e';
for (int i = 0; ichar ch = vtr [i];
cout << ch << ";

cout << endl;
retur 0;

Utgangen er:

A B C D E

Vektorbiblioteket 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 + 1

Med 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:

vektor vtr = 'a', 'b', 'c', 'd', 'e';
for (int i = 0; ichar ch = vtr [i];
cout << ch << ";

cout << endl;

Utgangen er:

A c e
Hopp over 'B' og 'D'.

Sløyfe bakover

Følgende kode bruker en for-loop for å sløyfe bakover, en vektor av tegn (chars):

int main ()

vektor vtr = 'a', 'b', 'c', 'd', 'e';
for (int i = vtr.størrelse ()-1; Jegchar ch = vtr [i];
cout << ch << ";

cout << endl;
retur 0;

Utgangen er:

E D C B A

Loopingen begynner fra den høyeste indeksen (4), som er gitt av:

VTR.størrelse ()-1

I 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 - 1

Med 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:

vektor vtr = 'a', 'b', 'c', 'd', 'e';
for (int i = vtr.størrelse ()-1; Jegchar ch = vtr [i];
cout << ch << ";

cout << endl;

Utgangen er:

E c a

hopper 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:

#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

vektor vtr = 'a', 'b', 'c', 'd', 'e';
vektor:: iterator iter = VTR.begynne();
for (iter = iter; itererchar ch = *iter;
cout << ch << ";

cout << endl;
retur 0;

Utgangen er:

A B C D E

Observer 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;
cout << ch << ";

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 + 1

Pluss-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:

vektor vtr = 'a', 'b', 'c', 'd', 'e';
vektor:: iterator iter = VTR.begynne();
for (iter = iter; itererchar ch = *iter;
cout << ch << ";

cout << endl;

Utgangen er:

A c e

Hopp 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 ()

vektor vtr = 'a', 'b', 'c', 'd', 'e';
vektor:: Reverse_Iterator Iter = VTR.rbegin ();
for (iter = iter; itererchar ch = *iter;
cout << ch << ";

cout << endl;
retur 0;

Utgangen er:

E D C B A

Reverse_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 + 1

Med 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:

vektor vtr = 'a', 'b', 'c', 'd', 'e';
vektor:: Reverse_Iterator Iter = VTR.rbegin ();
for (iter = iter; itererchar ch = *iter;
cout << ch << ";

cout << endl;

Utgangen er:

E c a

hopper 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) uttalelse

Denne 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:

vektor vtr = 'a', 'b', 'c', 'd', 'e';
for (char ch: vtr)
cout << ch << ";

cout << endl;

Utgangen er:

A B C D E

Looping ved hjelp av for_each () -funksjonen

For_each () -funksjonen brukes fra det inkluderte algoritmebiblioteket. Syntaksen er:

mal
contexpr -funksjon for_each (InputIterator First, InputIterator Last, Function F);

Det 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:

#inkludere
#inkludere
#inkludere
ved hjelp av navneområdet STD;
void func (char ch)
cout << ch << ";

int main ()

vektor vtr = 'a', 'b', 'c', 'd', 'e';
for_each (VTR.Begynn (), VTR.slutt (), func);
cout << endl;
retur 0;

Utgangen er:

A B C D E

Konklusjon

Å 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.