lambdas c with examples
Naučite se vse o Lambda izražanju v jeziku C ++ s preprostimi izrazi.
Lambda izraz je najnovejši koncept v jeziku C ++, ki je bil predstavljen od C ++ 11 dalje.
V tej vadnici bomo spoznali lambde v jeziku C ++. Razpravljali bomo tudi o tem, kako je mogoče v programu definirati in uporabljati lambde.
=> Tukaj si oglejte celotno serijo usposabljanj za C ++.
Vprašanja za plsql in odgovore za izkušene
Kaj se boste naučili:
Lambda izrazi / funkcije
Lambde, kot jih običajno imenujejo, so v bistvu majhni delčki kode, ki jih lahko uporabimo znotraj funkcij ali celo stavkov za klice funkcij. Niso poimenovani ali ponovno uporabljeni.
Lambde lahko razglasimo za »samodejne« in jih uporabimo kjer koli v programu.
Kako uporabljati / pisati Lambda?
Splošna sintaksa definiranja lambdas je naslednja:
(Capture clause) (parameter_list) mutable exception ->return_type { Method definition; }
Zajem zapiranja : Lambda uvodnik po specifikaciji C ++.
Seznam parametrov : Imenuje se tudi kot lambda deklaracija. Je neobvezna in je podobna seznamu parametrov metode.
Spremenljivo : Neobvezno. Omogoča spreminjanje spremenljivk, zajetih s klicem po vrednosti.
izjema : Specifikacija izjem. Neobvezno. Uporabite »noexcept«, da označite, da lambda ne povzroča izjeme.
Vrnitev_vrste : Neobvezno. Prevajalnik sam izračuna vrsto vrnitve izraza. Ker pa so lambde bolj zapletene, je bolje vključiti vrsto return, saj prevajalnik morda ne bo mogel razbrati vrste return.
Opredelitev metode : Lambda telo.
Klavzula za zajemanje lambda definicije se uporablja za določanje, katere spremenljivke so zajete in ali so zajete s sklicem ali vrednostjo.
Prazno zapiranje zajema () pomeni, da lambda ne uporablja nobenih spremenljivk, kar pomeni, da lahko dostopa le do spremenljivk, ki so zanjo lokalne.
Način 'zajem-privzeto' prikazuje, kako zajeti zunaj spremenljivk, na katere se sklicuje Lambda:
- Zapiranje zajema (&) pomeni, da so spremenljivke zajete s sklicem.
- Zapiranje zajema (=) pomeni, da so spremenljivke zajete po vrednosti.
Če imamo privzeto zajem in klavzulo o zajemanju, potem ne moremo imeti identifikatorja pri zajemanju tega določenega zajema lahko ima & identifikator. Podobno, če klavzula za zajemanje vsebuje capture-default =, potem klavzula za zajem ne more imeti identifikatorja form =. Tudi identifikator ali 'to' se v klavzuli za zajemanje ne more pojaviti več kot enkrat.
To bi moralo biti razvidno iz naslednjih primerov.
(&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
Tu so vsote, sum_var in I spremenljivke, ki jih je treba zajeti in uporabiti v lambda.
Spodaj je osnovni primer Lambda izraza v jeziku 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; }
Izhod:
Vsota dveh celih števil: 11
Tu imamo vstavljen lambda izraz za izračun vsote dveh vrednosti. Vrsto vrednosti a in b smo določili kot celi števili.
Ena težava z zgornjo kodo je, da deluje samo za cela števila. Če kasneje v programu želimo dodati dve dvojici ali nizu ali katero koli drugo vrsto, bomo morali imeti toliko lambd. To ni učinkovit način programiranja.
To težavo lahko odpravimo z uporabo parametrov predloge. Zaradi tega so lambde posplošene za vse vrste podatkov. To se naredi od C ++ 14 naprej.
Torej bo zgornji program spremenjen na naslednji način:
#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) = '< Izhod:
Vsota (5,6) = 11
Vsota (2,0,6,5) = 8,5
Vsota ((niz ('SoftwareTesting'), niz ('help.com')) = SoftwareTestinghelp.com
Tako smo v tem programu uporabili generično lambda vsoto, s katero lahko najdemo vsoto obeh predmetov katere koli vrste. Upoštevajte, da smo s ključno besedo »auto« označili, da bo vrsta podatkov parametra izračunana na podlagi podatkov.
odprtokodna orodja za upravljanje življenjskega cikla
Za prikaz uporabe te lambde smo jo uporabili s tremi različnimi vrstami podatkov, int, float in string. Iz izhoda vemo, da se glede na vrsto podatkov izvaja operacija seštevanja. Na primer, ko oskrbujemo parametre nizov z lambda vsoto, ta združi oba niza.
Zaključek
Prišli smo do konca te vaje o lambda izrazih v jeziku C ++. To je najnovejši koncept v jeziku C ++ in je lahko v veliko pomoč, ko moramo v vrstici izvesti majhen delček kode. Lambda je lahko tudi generična in uporabljena za vse vrste podatkov.
V naši prihajajoči vadnici bomo razpravljali o nekaterih dodatnih temah v jeziku C ++, kot so čas, standardni vhod / izhod in beleženje.
=> Tukaj preberite priljubljeno serijo usposabljanj za C ++.
Priporočeno branje