C ++ std for_each pętla

C ++ std for_each pętla
„Pętle std :: For-each to inna zdolność, która służy temu samemu celowi, co ogólne techniki zapętlania, takie jak„ for ”,„ while ”i„ zrób ”, które są obsługiwane przez język C ++. Ta pętla wymaga funkcji, która przepływa przez każdy element kontenera przed powrotem. Aby ta pętla działała, musi być ona uwzględniona, ponieważ jest określona w pliku nagłówka „Algorytm”: #inklude za każdym razem, gdy iterujesz elementy tablicy lub kontenera i przeprowadzasz różne operacje, takie jak dostęp, zmiana itp. Chociaż możesz uzyskać ten sam wynik, wprowadzając całą pętlę, użycie tej metody pozwoli ci zaoszczędzić czas, odciąć liczbę kodów programu i obniżyć prawdopodobieństwo niektórych błędów."

Składnia std :: for_each () pętla w c++

Składnia STD :: Dla każdej pętli () wdrożliśmy w C ++, jest następująca:

for_each (początek_iterator, end_iterator, func)


Gdzie FUNC jest funkcją jednego parametru, która pobiera każdy element z zakresu [początek, koniec] jako argument, i zaczyna się i kończą iteratory wejściowe odnoszące się do punktów początkowych i końcowych regionu w sekwencji w celu oceny. Poniżej wyjaśniliśmy funkcjonalność każdego parametru.

początek_iterator: Iterator wejściowy odnoszący się do pierwszej pozycji w sekwencji, której używamy do oceny, która rozpoczyna zakres.

end_iterator: Iterator wejściowy odnosi się do końca zakresu w sekwencji oceny, której używamy.

FUNC: funkcja z jednym argumentem, który przyjmuje każdy składnik zakresu [start, koniec] jako argument. Parametr funkcji może być dostarczany albo „odniesienie” lub „wartość uzupełniająca.„Ta funkcja może, ale nie musi przynieść rezultatu.

Przykład 1

Spójrzmy na prosty przykład, w którym używamy funkcji STD :: dla każdego () do wyświetlania każdego elementu wewnątrz zakresu [Start, End].

#włączać
#włączać
#włączać
void display_item (int item)
STD :: Cout<
int main ()
STD :: tablica int_array = 2,4,6, -6,0,110, -2,77;
STD :: Cout<<"Displaying the items: \n";
std :: for_each (int_array.początek (), int_Array.end (), display_item);
powrót 0;



Kod rozpoczyna się od sekcji nagłówka. Mamy trzy pliki nagłówka C++. Do korzystania z pętli STD :: For_each dodaliśmy plik nagłówka algorytmu. Następnie utworzyliśmy funkcję void jako display_item, która przyjmuje element wejściowy typu danych int. Wewnątrz tej funkcji mamy tylko polecenie STD :: Cout dla tej zmiennej elementu.

Następnie mamy główną funkcję, w której zadeklarowaliśmy i zainicjowaliśmy tablicę. STD :: For_each pętla służy do rowerem nad każdym elementem w danej tablicy. Funkcja display_item jest wywoływana w celu wyświetlania tablicy elementów w zakresie [początek, koniec].

Przykład 2

Wykorzystanie STD :: dla każdego z trwałej zmiany w kolekcji. Dostarczona funkcja przyjmuje parametry „odniesienia”, aby na stałe zmodyfikować elementy kolekcji.

#włączać
#włączać
#włączać
void func_upperCase (std :: String & str_val)
dla (int i = 0; iif (str_val [i]> = 'a' i str_val [i] <= 'z')
str_val [i] = (char) (str_val [i]-'a' + 'a');



int main ()
STD :: Cout<<"output: \n";
STD :: tablica str_array = „the”, „program”, „of”,
„C ++”;
std :: for_each (str_array.początek (), str_Array.end (), func_upperCase);
dla (int i = 0; iSTD :: Cout<
powrót 0;



Tutaj w początkowym etapie zaimportowaliśmy pliki nagłówka do wdrożenia programu. Następnie skonstruowaliśmy funkcję func_upperCaserase do przekształcania sznurka dolnej w sznur. Następnie wdrożyliśmy główną metodę, w której zdefiniowaliśmy szereg ciągów, który ma całą dolną sprawę. STD :: For_each pętla jest używana do iteracji wszystkich znaków łańcuchowych. STD :: For_each pętla wywołuje funkcję FUNC_UPPERCASE jako argument dla każdego znaku łańcucha w zakresie [początek, koniec]. Następnie mamy pętlę do drukowania wszystkich znaków ciągu po konwersji w górnej sprawie.

Na ekranie wyjściowym możesz wizualizować, że wszystkie małe znaki łańcuchowe są przekształcane w wielki poziom.

Przykład 3

Poniższy przykład wykorzystuje funkcję Lambda w celu zwiększenia każdego elementu w wektorze przed obliczeniem ich sumy za pomocą przeciążonego operatora () w obiekcie funkcji, znanym również jako FUNCTOR.

#włączać
#włączać
#włączać
struct add
Add () add = 0;
void operator () (int n) add += n;
int add;
;
int main ()

STD :: wektor liczby 4, 5, 1, 8, 16, 221;
STD :: Cout << "Numbers before: ";
dla (auto n: liczby)
STD :: Cout << n << " ";

STD :: Cout << '\n';
std :: for_each (liczby.początek (), liczby.end (), [] (int & n) n ++; );
Dodaj a = std :: for_each (liczby.początek (), liczby.end (), add ());
STD :: Cout << "Numbers after: ";
dla (auto n: liczby)
STD :: Cout << n << " ";

STD :: Cout << '\n';
STD :: Cout << "Result: " << a.add << '\n';



Tutaj ustanowiliśmy strukturę i przypisaliśmy nazwę Dodaj. Funkcja add () jest również tam zdefiniowana i wewnątrz tej funkcji inicjujemy zmienną Dodaj do liczby zero. Ponadto funkcja pustki jest tworzona z operatorem nazwy, co zwiększa wartość n. Potem pojawia się główna metoda tego programu.

Wewnątrz głównej metody zadeklarowaliśmy klasę wektora, w której zainicjowaliśmy listę liczb losowych. Wydrukowaliśmy liczby za pomocą pętli dla. Następnie mamy STD :: for_each pętla dla iteracji nad każdym elementem na liście liczb, a następnie każdy element na liście jest zwiększany. Wydrukowaliśmy liczby po operacji pętli For_each. Ostatecznie wyświetliśmy sumę liczb, tworząc obiekt jako A poprzez wywołanie zmiennej dodawania.

Liczby są generowane przed i po pętli For_each jako wyjście. Ponadto suma liczb jest wyświetlana poniżej.

Przykład 4

Drukowanie elementów w dowolnym pojemniku jest możliwe z funkcją STD :: For_each. Aby zrozumieć, jak go używać, zobacz przykład, w którym wydrukowaliśmy wektor i mapę poniżej.

#włączać
#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
void funkcja_1 (int i)

Cout << i << " ";

void funkcja_2 (para P1)

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

int main ()

wektor tablica 2, 5, 1, 9, 3, 8;
mapa 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 (tablica.początek (), tablica.end (), funkcja_1);
Cout << "\n";
Cout << "Displaying the map\n";
for_each (map_val.początek (), map_val.end (), funkcja_2);
Cout << "\n";
powrót 0;



Zdefiniowaliśmy funkcję jako funkcję_1, w której zadeklarowana jest zmienna „i”, a wewnątrz tej funkcji wyświetliśmy „i” z poleceniem Cout. Następnie skonstruowaliśmy inną funkcję jako funkcja_2, która jest nazywana klasą par, i ustawiliśmy obiekt p. Wewnątrz funkcji_2 zdefiniowaliśmy każdy element w parie dla mapy. Następnie, w ramach głównej funkcji, inicjujemy tablicę wektorów, a także mapujemy wartości. Następnie używamy pętli for_each dla wektorów i map dla iteracji na każdym elemencie.

Wykonanie powyższego programu wygenerowało następujące dane wyjściowe.

Wniosek

Dlatego wykorzystanie std :: for_each () ma tę zaletę, że produkt programu i zmniejszenie wielkości bazy kodowej. Dodatkowo O (N) to złożoność czasowa. Możesz użyć std :: for_each () w każdej sytuacji, gdy każdy element musi przejść wiele przetwarzania i ma dużą bazę kodową. Bardziej elastyczny std :: for_each (). Każdy rodzaj pojemnika może być używany z iteracją. Oprócz STD :: for_each () umożliwia nam utworzenie algorytmu, który działa z iteratorem.