lambdas c with examples
Aflați totul despre expresia Lambda în C ++ în termeni simpli.
Expresia Lambda este cel mai nou concept din C ++ care a fost introdus începând cu C ++ 11.
În acest tutorial, vom afla despre lambdas în C ++. De asemenea, vom discuta despre modul în care lambdas poate fi definit și utilizat în program.
=> Verificați aici seria completă de formare C ++.
Ce veți învăța:
Expresii / Funcții Lambda
Lambdas, așa cum sunt denumite în mod obișnuit, sunt în principiu mici fragmente de cod în linie care pot fi utilizate în funcții sau chiar instrucțiuni de apel funcțional. Nu sunt denumite sau refolosite.
Putem declara lambdas ca „auto” și le putem folosi oriunde în program.
Cum se folosește / se scrie Lambdas?
Sintaxa generală a definirii lambdas este următoarea:
(Capture clause) (parameter_list) mutable exception ->return_type { Method definition; }Închidere captură : Introducere Lambda conform specificațiilor C ++.
Lista parametrilor : Numit și ca declarații lambda. Este opțional și este similar cu lista de parametri a unei metode.
Mutabil : Opțional. Permite modificarea variabilelor captate de un apel după valoare.
excepție : Specificații de excepție. Opțional. Folosiți „noexcept” pentru a indica faptul că lambda nu aruncă o excepție.
Return_type : Opțional. Compilatorul deduce singur tipul de returnare al expresiei. Dar, pe măsură ce lambdas devine mai complex, este mai bine să includeți tipul returnat, deoarece compilatorul ar putea să nu poată deduce tipul returnat.
Definirea metodei : Corp lambda.
O clauză de captură a definiției lambda este utilizată pentru a specifica ce variabile sunt capturate și dacă sunt capturate prin referință sau după valoare.
O închidere de captură goală (), indică faptul că lambda nu folosește variabile, ceea ce înseamnă că poate accesa doar variabilele care sunt locale pentru aceasta.
Modul „capture-default” indică modul de captare în afara variabilelor la care se face referire în Lambda:
- Închiderea capturii (&) înseamnă că variabilele sunt capturate prin referință.
- Închiderea capturii (=) indică faptul că variabilele sunt capturate după valoare.
Dacă avem o clauză de captură implicită și o clauză de captură, atunci nu putem avea un identificator în capturarea acelei capturi specifice poate avea identificatorul &. În mod similar, dacă clauza de captură conține capture-default =, atunci clauza de captură nu poate avea forma = identificator. De asemenea, un identificator sau „acesta” nu poate apărea de mai multe ori în clauza de captură.
Acest lucru ar trebui să fie clar din următoarele exemple.
(&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 onceAici, sum, sum_var și eu sunt variabilele care trebuie capturate și utilizate în lambda.
Dat mai jos este un exemplu de bază al unei expresii Lambda în 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; }Ieșire:
Suma a două numere întregi: 11
Aici avem expresie lambda în linie pentru a calcula suma a două valori. Am specificat tipul valorilor a și b ca numere întregi.
O problemă cu codul de mai sus este că funcționează numai pentru numere întregi. Dacă mai târziu în program, dorim să adăugăm două duble sau șiruri sau orice alte tipuri, va trebui să avem acele multe lambda. Acesta nu este un mod eficient de programare.
Putem depăși această problemă folosind parametrii șablonului. Acest lucru face ca lambdas să fie generalizate pentru toate tipurile de date. Acest lucru se face începând cu C ++ 14.
Deci, programul de mai sus va fi modificat după cum urmează:
#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) = '< Ieșire:
Suma (5,6) = 11
Suma (2,0,6,5) = 8,5
Sum ((șir („SoftwareTesting”), șir („help.com”)) = SoftwareTestinghelp.com
Astfel, în acest program, am folosit o sumă lambda generică, care poate fi utilizată pentru a găsi suma celor două obiecte de orice tip. Rețineți că am folosit cuvântul cheie „auto” pentru a indica faptul că tipul de date al parametrului va fi dedus pe baza datelor.
Pentru a demonstra utilizarea acestei lambda, am folosit-o cu trei tipuri de date diferite, int, float și șir. Din rezultat, știm că, în funcție de tipul de date, se efectuează operația de sumă. De exemplu, când furnizăm parametrii șirului la suma lambda, acesta concatenează cele două șiruri.
Concluzie
Am ajuns la sfârșitul acestui tutorial despre expresiile lambda în C ++. Acesta este cel mai nou concept din C ++ și poate fi foarte util atunci când trebuie să executăm un mic fragment de cod inline. Lambdas poate fi, de asemenea, generat și utilizat pentru toate tipurile de date.
În viitorul nostru tutorial, vom discuta câteva dintre subiectele suplimentare în C ++, cum ar fi timpul, intrarea / ieșirea standard și jurnalizarea.
=> Citiți aici seria populară de formare C ++.
ce este un fișier .bin
Lectură recomandată
- Ce este testarea comparativă (Aflați cu exemple)
- Tutorial Python DateTime cu exemple
- Tăiați comanda în Unix cu exemple
- Sintaxa de comandă Unix Cat, Opțiuni cu exemple
- Utilizarea cursorului în MongoDB cu exemple
- Comanda Ls în Unix cu exemple
- Funcții de dată și oră în C ++ cu exemple
- Metoda MongoDB Sort () cu exemple