lambdas c with examples
Naučite sve o Lambda izrazu na C ++ jednostavnim riječima.
Lambda izraz je najnoviji koncept na C ++ koji je uveden od C ++ 11 nadalje.
U ovom uputstvu naučit ćemo o lambdama u jeziku C ++. Također ćemo razgovarati o tome kako se lambde mogu definirati i koristiti u programu.
=> Ovdje provjerite cjelovitu seriju obuka za C ++.
Što ćete naučiti:
kôd za razvrstavanje mjehurića c ++
Lambda izrazi / funkcije
Lambda, kako ih obično zovu, u osnovi su mali ubačeni isječci koda koji se mogu koristiti unutar funkcija ili čak izjava poziva funkcije. Nisu imenovani niti ponovno upotrijebljeni.
Lambde možemo proglasiti 'automatskim' i koristiti ih bilo gdje u programu.
Kako se koristi / piše Lambda?
Opća sintaksa definiranja lambda je kako slijedi:
(Capture clause) (parameter_list) mutable exception ->return_type { Method definition; }
Zatvaranje snimanja : Lambda uvodnik prema C ++ specifikaciji.
Popis parametara : Također se naziva i lambda deklaracija. Nije obavezno i sličan je popisu parametara metode.
Promjenjivo : Neobvezno. Omogućuje izmjenu varijabli zabilježenih pozivom po vrijednosti.
iznimka : Specifikacija izuzetaka. Neobvezno. Upotrijebite 'noexcept' da naznačite da lambda ne donosi iznimku.
Povratak_tip : Neobvezno. Prevoditelj samostalno izračunava povratnu vrstu izraza. No kako lambde postaju složenije, bolje je uključiti tip return jer kompajler možda neće moći odrediti tip return.
Definicija metode : Lambda tijelo.
Klauzula hvatanja lambda definicije koristi se za određivanje koje su varijable zabilježene i jesu li zabilježene referencom ili vrijednošću.
Prazno zatvaranje hvatanja () znači da lambda ne koristi nikakve varijable, što znači da može pristupiti samo onim lokalnim varijablama.
Način 'capture-default' ukazuje na način snimanja izvan varijabli na koje se odnosi Lambda:
- Zatvaranje hvatanja (&) znači da se varijable bilježe referencom.
- Zatvaranje hvatanja (=) označava da su varijable zabilježene po vrijednosti.
Ako imamo default-zahvat i klauzulu za hvatanje, tada ne možemo imati identifikator u hvatanju tog određenog hvatanja može imati & identifikator. Slično tome, ako klauzula hvatanja sadrži capture-default =, tada klauzula hvatanja ne može imati identifikator form =. Također, identifikator ili ‘ovo’ ne može se pojaviti više puta u klauzuli snimanja.
To bi trebalo biti jasno iz sljedećih primjera.
(&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
Ovdje su sum, sum_var i I varijable koje treba uhvatiti i koristiti u lambda.
Dolje je dan osnovni primjer Lambda izraza u 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; }
Izlaz:
Zbroj dviju cijelih brojeva: 11
Ovdje imamo ugrađeni lambda izraz za izračunavanje zbroja dviju vrijednosti. Naveli smo vrstu vrijednosti a i b kao cijele brojeve.
Jedan od problema s gornjim kodom je taj što radi samo za cijele brojeve. Ako kasnije u programu želimo dodati dvije parove ili žice ili bilo koje druge vrste, morat ćemo imati toliko mnogo lambda. Ovo nije učinkovit način programiranja.
Taj problem možemo prevladati pomoću parametara predloška. To čini lambija općenito za sve tipove podataka. To se radi od C ++ 14 nadalje.
Dakle, gornji program bit će izmijenjen kako slijedi:
#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) = '< Izlaz:
Zbroj (5,6) = 11
Zbroj (2,0,6,5) = 8,5
Zbroj ((string ('SoftwareTesting'), string ('help.com')) = SoftwareTestinghelp.com
Stoga smo u ovom programu koristili generički lambda zbroj koji se može koristiti za pronalaženje zbroja dvaju objekata bilo koje vrste. Imajte na umu da smo koristili ključnu riječ 'auto' kako bismo naznačili da će se vrsta podataka parametra izvesti na temelju podataka.
Da bismo demonstrirali upotrebu ove lambde, koristili smo je s tri različite vrste podataka, int, float i string. Iz izlaza znamo da se prema vrsti podataka provodi operacija zbrajanja. Na primjer, kada parametre niza isporučujemo lambda zbroju, on spaja dva niza.
Zaključak
Došli smo do kraja ovog vodiča o lambda izrazima u jeziku C ++. Ovo je najnoviji koncept na C ++-u i može biti od velike pomoći kada moramo izvršiti mali isječak koda u liniji. Lambda se također može generirati i koristiti za sve vrste podataka.
U našem nadolazećem vodiču razgovarat ćemo o nekim dodatnim temama u C ++-u poput vremena, standardnog unosa / izlaza i zapisivanja.
=> Ovdje pročitajte popularne serije obuke za C ++.
besplatni softver za pretvorbu video zapisa za Windows
Preporučena literatura
- Što je usporedno testiranje (naučite na primjerima)
- Python DateTime Vodič s primjerima
- Izreži naredbu u Unixu s primjerima
- Sintaksa naredbe Unix Cat, mogućnosti s primjerima
- Primjena pokazivača u MongoDB-u s primjerima
- Ls naredba u Unixu s primjerima
- Funkcije datuma i vremena u C ++ s primjerima
- MongoDB metoda sortiranja () s primjerima