lambdas c with examples
Dowiedz się wszystkiego o wyrażeniu lambda w C ++ w prostych słowach.
Wyrażenie lambda to najnowsza koncepcja w C ++, która została wprowadzona od C ++ 11 i nowszych.
W tym samouczku dowiemy się o lambdach w C ++. Omówimy również, w jaki sposób można definiować i wykorzystywać lambdy w programie.
=> Sprawdź całą serię szkoleń C ++ tutaj.
Czego się nauczysz:
jak dodawać elementy do tablicy
Wyrażenia / funkcje lambda
Lambdy, jak się je powszechnie nazywa, są w zasadzie małymi wstawionymi fragmentami kodu, których można używać wewnątrz funkcji, a nawet instrukcji wywołania funkcji. Nie są nazywane ani ponownie wykorzystywane.
Możemy zadeklarować lambdy jako „auto” i używać ich w dowolnym miejscu programu.
Jak używać / pisać lambdy?
Ogólna składnia definiowania lambd jest następująca:
(Capture clause) (parameter_list) mutable exception ->return_type { Method definition; }
Zamknięcie uchwytu : Wprowadzający lambda zgodnie ze specyfikacją C ++.
Lista parametrów : Nazywane również deklaracjami lambda. Jest opcjonalna i jest podobna do listy parametrów metody.
Zmienny : Opcjonalny. Umożliwia modyfikację zmiennych przechwyconych przez wywołanie według wartości.
wyjątek : Specyfikacja wyjątku. Opcjonalny. Użyj „noexcept”, aby wskazać, że lambda nie zgłasza wyjątku.
Return_type : Opcjonalny. Kompilator samodzielnie wyprowadza zwracany typ wyrażenia. Ale ponieważ lambdy stają się bardziej złożone, lepiej jest uwzględnić typ zwracany, ponieważ kompilator może nie być w stanie wydedukować typu zwracanego.
Definicja metody : Ciało Lambda.
Klauzula przechwytywania definicji lambda służy do określenia, które zmienne są przechwytywane i czy są przechwytywane przez odwołanie, czy przez wartość.
Puste zamknięcie przechwytywania [] oznacza, że lambda nie używa żadnych zmiennych, co oznacza, że ma dostęp tylko do zmiennych, które są dla niej lokalne.
Tryb „przechwytywanie-domyślne” wskazuje, jak przechwytywać poza zmiennymi, do których odwołuje się Lambda:
- Zamknięcie przechwytywania [&] oznacza, że zmienne są wychwytywane przez odniesienie.
- Zamknięcie przechwytywania [=] wskazuje, że zmienne są przechwytywane według wartości.
Jeśli mamy klauzulę przechwytywania domyślnego i przechwytywania, nie możemy mieć identyfikatora podczas przechwytywania, a to konkretne przechwytywanie może mieć identyfikator &. Podobnie, jeśli klauzula przechwytywania zawiera przechwytywanie-default =, to klauzula przechwytywania nie może mieć identyfikatora form =. Ponadto identyfikator lub „this” nie może występować więcej niż raz w klauzuli przechwytywania.
Powinno to jasno wynikać z poniższych przykładów.
[&sum, sum_var] //OK, explicitly specified capture by value [sum_var, &sum] //ok, explicitly specified capture by reference [&, &sum_var] // error, & is the default still sum_var preceded by & [i, i] //error, i is used more than once
Tutaj sum, sum_var i I są zmiennymi, które mają być przechwycone i użyte w lambdzie.
Poniżej podano podstawowy przykład wyrażenia lambda w C ++.
#include #include using namespace std; int main() { auto sum = [](int a, int b) { return a + b; }; cout <<'Sum of two integers:'<< sum(5, 6) << endl; return 0; }
Wynik:
Suma dwóch liczb całkowitych: 11
Tutaj mamy wbudowane wyrażenie lambda do obliczenia sumy dwóch wartości. Określiliśmy typ wartości a i b jako liczby całkowite.
Jednym z problemów z powyższym kodem jest to, że działa on tylko dla liczb całkowitych. Jeśli w dalszej części programu będziemy chcieli dodać dwie liczby podwójne, łańcuchy lub inne typy, będziemy musieli mieć te wiele lambd. To nie jest skuteczny sposób programowania.
Możemy rozwiązać ten problem, używając parametrów szablonu. To sprawia, że lambdy są uogólnione dla wszystkich typów danych. Odbywa się to począwszy od C ++ 14.
Zatem powyższy program zostanie zmodyfikowany w następujący sposób:
#include #include using namespace std; int main() { // generalized lambda auto sum = [](auto a, auto b) { return a + b; }; cout <<'Sum(5,6) = '<< sum(5, 6) << endl; // sum of two integers cout <<'Sum(2.0,6.5) = '< Wynik:
Suma (5,6) = 11
Suma (2,0; 6,5) = 8,5
Sum ((string („SoftwareTesting”), string („help.com”)) = SoftwareTestinghelp.com
Dlatego w tym programie użyliśmy ogólnej sumy lambda, której można użyć do obliczenia sumy dwóch obiektów dowolnego typu. Zwróć uwagę, że użyliśmy słowa kluczowego „auto”, aby wskazać, że typ danych parametru zostanie wydedukowany na podstawie danych.
Aby zademonstrować użycie tej lambdy, użyliśmy jej z trzema różnymi typami danych, int, float i string. Z danych wyjściowych wiemy, że zgodnie z typem danych wykonywana jest operacja sumowania. Na przykład, kiedy dostarczamy parametry łańcuchowe do sumy lambda, łączy ona dwa ciągi.
Wniosek
Doszliśmy do końca tego samouczka dotyczącego wyrażeń lambda w C ++. Jest to najnowsza koncepcja w C ++ i może być bardzo pomocna, gdy musimy wykonać mały fragment kodu w tekście. Lambdy mogą być również generyczne i używane dla wszystkich typów danych.
W naszym nadchodzącym samouczku omówimy niektóre dodatkowe tematy w C ++, takie jak czas, standardowe wejście / wyjście i logowanie.
=> Przeczytaj popularne serie szkoleń C ++ tutaj.
jak otworzyć okna plików bin
rekomendowane lektury
- Co to jest testowanie porównawcze (nauka z przykładami)
- Python DateTime Tutorial z przykładami
- Polecenie Cut w systemie Unix z przykładami
- Składnia poleceń Unix Cat, opcje z przykładami
- Wykorzystanie kursora w MongoDB z przykładami
- Polecenie Ls w systemie Unix z przykładami
- Funkcje daty i czasu w C ++ z przykładami
- Metoda MongoDB Sort () z przykładami