C ++ STD for_each Loop

C ++ STD for_each Loop
"STD :: For-Every Loops er en annen evne som tjener samme mål som generelle loopingteknikker som" for "," mens "og" gjør-mens "som støttes av C ++ -språket. Denne sløyfen tar en funksjon som går gjennom hvert element i beholderen før du kommer tilbake. For at denne sløyfen skal fungere, må den inkluderes fordi den er spesifisert i overskriftsfilen "Algoritme": #include når du itererer gjennom elementene i en matrise eller container og utfører forskjellige operasjoner på dem, for eksempel tilgang, endring osv. Selv om du kan få det samme resultatet ved å legge inn hele for Loop, vil bruk av denne metoden spare deg for tid, kutte antall programkoder og senke sannsynligheten for noen feil.”

Syntaks av std :: for_each () loop i C++

Syntaksen til std :: for hver () sløyfe, vi distribuert i C ++ er som følger:

for_each (BEGIN_ITERATOR, END_ITERATOR, FUNC)


Der Func er en en-parameterfunksjon som tar hvert element fra serien [Begynn, slutt] som et argument, og begynner og slutt er inngangs iteratorene som refererer til start- og etterbehandlingspunktene i regionen i sekvensen for å evaluere. Nedenfor har vi forklart funksjonaliteten til hver parameter.

start_iterator: En input iterator som refererer til den første posisjonen i sekvensen vi bruker for evaluering som begynner rekkevidden.

end_iterator: En input iterator refererer til rekkevidden til ende i evalueringssekvensen vi bruker.

func: en funksjon med ett argument som tar hver komponent i området [start, slutt] som et argument. Funksjonens parameter kan leveres enten "By-Reference" eller "Byverdi.”Denne funksjonen kan kanskje ikke gi et resultat.

Eksempel 1

La oss se på et enkelt eksempel der vi bruker STD :: for hver () -funksjon for å sende ut hvert element inne i området [Start, End].

#inkludere
#inkludere
#inkludere
void display_item (int element)
std :: cout<
int main ()
STD :: Array int_array = 2,4,6, -6,0,110, -2,77;
std :: cout<<"Displaying the items: \n";
std :: for_each (int_array.begynn (), int_array.end (), display_item);
retur 0;



Koden begynner fra overskriftsdelen. Vi har tre overskriftsfiler av C++. For å bruke std :: for_each -sløyfen, har vi lagt til algoritmeoverskriftsfilen. Deretter har vi opprettet Void -funksjonen som Display_Item, som tar et inngangselement av datatype int. Inne i den funksjonen har vi bare std :: cout -kommandoen for denne variabelen.

Deretter har vi hovedfunksjonen der vi har erklært og initialisert en matrise. STD :: for_each Loop brukes til å sykle over hvert element i den gitte matrisen. Display_item -funksjonen kalles for å vise utvalget av elementer innenfor rekkevidden [Begynn, slutt] for bare en gang.

Eksempel 2

Bruke std :: for hver for å gjøre vedvarende endringer i samlingen. Den medfølgende funksjonen tar parametrene "bim-referanse" for å endre samlingens elementer permanent.

#inkludere
#inkludere
#inkludere
void func_uppercase (std :: string & str_val)
for (int i = 0; iif (str_val [i]> = 'a' og str_val [i] <= 'z')
str_val [i] = (char) (str_val [i]-'a' + 'a');



int main ()
std :: cout<<"output: \n";
STD :: Array str_array = "", "program", "av",
"C ++";
std :: for_each (str_array.Begynn (), Str_array.end (), func_uppercase);
for (int i = 0; istd :: cout<
retur 0;



Her i det første trinnet har vi importert overskriftsfilene for implementering av programmet. Etter det konstruerte vi en funksjon func_uppercase for å transformere nedre case-streng til øvre case-streng. Deretter distribuerte vi hovedmetoden der vi definerte en rekke strenger som har alle små bokstaver. STD :: for_each Loop brukes til å iterere over alle strengtegnene. STD :: for_each -sløyfen påkaller func_uppercase -funksjonen som et argument for hvert strengtegn i området [Begynn, slutt]. Etter det har vi en for loop for å skrive ut alle strengtegnene etter konverteringen i store bokstaver.

Du kan visualisere i utgangsskjermen som alle småstrengtegnene blir transformert til store bokstaver.

Eksempel 3

Eksemplet som følger benytter en lambda -funksjon for å øke hvert medlem i en vektor før beregning av summen deres ved hjelp av en overbelastet operatør () i en funksjons objekt, også kjent som en funktor.

#inkludere
#inkludere
#inkludere
struct Legg til
Add () add = 0;
void operator () (int n) add += n;
int legge til;
;
int main ()

std :: vektor tall 4, 5, 1, 8, 16, 221;
std :: cout << "Numbers before: ";
for (auto n: tall)
std :: cout << n << " ";

std :: cout << '\n';
std :: for_each (tall.Begynn (), tall.end (), [] (int & n) n ++; );
Legg til a = std :: for_each (tall.Begynn (), tall.end (), legg til ());
std :: cout << "Numbers after: ";
for (auto n: tall)
std :: cout << n << " ";

std :: cout << '\n';
std :: cout << "Result: " << a.add << '\n';



Her har vi etablert en struktur og tildelt et navn Legg til. Funksjonen add () er også definert der, og inne i den funksjonen initialiserer vi variabelen Legg til med tallet null. Dessuten opprettes tomromsfunksjonen med navneoperatøren, som øker verdien av n. Så kommer hovedmetoden for dette programmet.

Inne i hovedmetoden har vi erklært vektorklassen der vi har initialisert listen over tilfeldige tall. Vi har skrevet ut tallene ved å bruke for -loopen. Etter det har vi std :: for_each -sløyfe for iterasjonen over hvert element i talllisten, og deretter økes hvert element i listen. Vi har skrevet ut tallene etter for_each -sløyfedriften. Til slutt har vi vist summen av tallene ved å opprette objektet som en ved å påkalle add -variabelen.

Tallene genereres før og etter for_each -sløyfen som en utgang. Summen av tallene vises også nedenfor.

Eksempel 4

Elementutskrift i hvilken som helst beholder er mulig med std :: for_each -funksjonen. For å forstå hvordan du bruker det, se eksemplet der vi skrev ut en vektor og et kart nedenfor.

#inkludere
#inkludere
#inkludere
#inkludere
ved hjelp av navneområdet STD;
void funksjon_1 (int i)

cout << i << " ";

void funksjon_2 (par p1)

cout << p1.first << "->"" << p1.second << endl;

int main ()

vektor Array 2, 5, 1, 9, 3, 8;
kart map_val;
map_val ['a'] = 2;
map_val ['b'] = 3;
map_val ['c'] = 6;
map_val ['d'] = 5;
map_val ['e'] = 8;
map_val ['f'] = 9;
cout << "Displaying the vector\n";
for_each (matrise.Begynn (), Array.end (), funksjon_1);
cout << "\n";
cout << "Displaying the map\n";
for_each (map_val.begynn (), map_val.end (), funksjon_2);
cout << "\n";
retur 0;



Vi har definert funksjonen som funksjon_1 der variabelen “i” er erklært, og inne i den funksjonen har vi vist “jeg” med cout -kommandoen. Deretter konstruerte vi en annen funksjon som funksjon_2, som kalles parklassen, og angi objektet P. Inne i funksjonen_2 har vi definert hvert element i et par for kartet. Deretter, innen hovedfunksjonen, initialiserer vi en rekke vektorer og kartlegger også verdier. Deretter bruker vi for_each -sløyfen for vektorene og kartene for iterasjon på hvert element.

Utførelsen av ovennevnte program genererte følgende utgang.

Konklusjon

Derfor har bruk av std :: for_each () fordelen av å gjøre programmet produktnivå og krympe størrelsen på kodebasen. I tillegg er o (n) den tidsmessige kompleksiteten. Du kan bruke std :: for_each () i enhver situasjon når hvert element må gå gjennom mye prosessering og har en stor kodebase. Den mer fleksible std :: for_each (). Enhver form for beholder kan brukes med iterasjon. På toppen av std :: for_each () gjør det oss i stand til å lage en algoritme som fungerer med en iterator.