lambdas c with examples
Naučte sa všetko o výraze lambda v jazyku C ++ jednoduchým spôsobom.
Výraz Lambda je najnovší koncept v C ++, ktorý bol zavedený od C ++ 11 a novších.
V tomto tutoriále sa dozvieme o lambdách v C ++. Budeme tiež diskutovať o tom, ako je možné lambdy definovať a používať v programe.
=> Kompletnú sériu školení v C ++ nájdete tu.
Čo sa dozviete:
Výrazy / funkcie lambda
Lambdy, ako sa bežne nazývajú, sú v zásade malé vložené úryvky kódu, ktoré sa dajú použiť vo vnútri funkcií alebo dokonca volania funkcií. Nie sú pomenované ani opakovane použité.
Lambdy môžeme vyhlásiť za „automatické“ a použiť ich kdekoľvek v programe.
Ako používať / písať lambdy?
Všeobecná syntax definície lambdas je nasledovná:
(Capture clause) (parameter_list) mutable exception ->return_type { Method definition; }
Zachyťte uzáver : Zavádzač lambda podľa špecifikácie C ++.
Zoznam parametrov : Nazývajú sa tiež ako vyhlásenia lambda. Je voliteľný a je podobný zoznamu parametrov metódy.
bublinové triedenie poľa c ++
Premenlivé : Voliteľné. Umožňuje úpravy premenných zachytených volaním podľa hodnoty.
výnimkou : Výnimka. Voliteľné. Použite výraz „noexcept“ na označenie, že lambda nevyvoláva výnimku.
Návratový_typ : Voliteľné. Kompilátor sám odvodí návratový typ výrazu. Ale pretože lambdy sú čoraz zložitejšie, je lepšie zahrnúť návratový typ, pretože kompilátor nemusí byť schopný odvodiť návratový typ.
Definícia metódy : Lambda karoséria.
Doložka o zachytení definície lambda sa používa na určenie, ktoré premenné sa zachytia a či sa zachytia pomocou referencie alebo podľa hodnoty.
Prázdny uzáver zachytenia () naznačuje, že lambda nepoužíva žiadne premenné, čo znamená, že má prístup iba k miestnym premenným.
Režim „predvolené snímanie“ naznačuje, ako snímať mimo premenných, na ktoré sa odkazuje v lambde:
- Uzávierka zachytenia (&) znamená, že premenné sú zachytené odkazom.
- Uzávierka zachytávania (=) naznačuje, že premenné sú zachytené podľa hodnoty.
Ak máme zachytenie-predvolené & klauzulu o zachytení, potom nemôžeme mať identifikátor v zachytení toho konkrétneho zachytenia môže mať & identifikátor. Podobne, ak klauzula o zachytení obsahuje capture-default =, potom klauzula o zachytení nemôže mať identifikátor form =. Identifikátor alebo „toto“ sa v doložke zachytenia tiež nemôže vyskytnúť viackrát.
To by malo byť zrejmé z nasledujúcich príkladov.
(&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 sú premenné, ktoré sa majú zachytiť a použiť v lambde, sum, sum_var a I.
Ďalej je uvedený základný príklad výrazu lambda v jazyku 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; }
Výkon:
Súčet dvoch celých čísel: 11
Tu máme vložený výraz lambda na výpočet súčtu dvoch hodnôt. Typ hodnôt a a b sme zadali ako celé čísla.
Jedným z problémov vyššie uvedeného kódu je, že funguje iba pre celé čísla. Ak neskôr v programe budeme chcieť pridať dve dvojlôžkové alebo dvojité struny alebo akékoľvek iné typy, budeme musieť mať tých veľa lambd. Toto nie je efektívny spôsob programovania.
Tento problém môžeme prekonať použitím parametrov šablón. Vďaka tomu sú lambdy zovšeobecnené pre všetky typy údajov. To sa deje od C ++ 14 ďalej.
Vyššie uvedený program bude upravený takto:
#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) = '< Výkon:
Súčet (5,6) = 11
Súčet (2,0,6,5) = 8,5
Súčet ((reťazec („SoftwareTesting“), reťazec („help.com“)) = SoftwareTestinghelp.com
V tomto programe sme teda použili všeobecný súčet lambda, pomocou ktorého je možné nájsť súčet dvoch objektov ľubovoľného typu. Upozorňujeme, že sme použili kľúčové slovo „auto“ na označenie toho, že dátový typ parametra bude odvodený na základe údajov.
Aby sme demonštrovali použitie tejto lambdy, použili sme ju s tromi rôznymi dátovými typmi, int, float a string. Z výstupu vieme, že podľa typu dát sa vykonáva súčtová operácia. Napríklad, keď dodáme parametre reťazca do súčtu lambda, spojí to dva reťazce.
Záver
Dostali sme sa na koniec tohto tutoriálu o výrazoch lambda v C ++. Toto je najnovší koncept v C ++ a môže byť veľmi užitočný, keď potrebujeme vložiť malý útržok kódu. Lambdy môžu byť tiež všeobecné a môžu sa používať pre všetky typy údajov.
V našom pripravovanom výučbe sa budeme venovať niektorým ďalším témam v jazyku C ++, ako sú čas, štandardný vstup / výstup a protokolovanie.
=> Prečítajte si populárnu sériu školení C ++ tu.
Odporúčané čítanie
- Čo je to porovnávacie testovanie (tu sa dozviete s príkladmi)
- Výukový program pre Python DateTime s príkladmi
- Vystrihnite príkaz v systéme Unix s príkladmi
- Syntax príkazov Unix Cat, možnosti s príkladmi
- Používanie kurzora v MongoDB s príkladmi
- Príkaz Ls v systéme Unix s príkladmi
- Funkcie dátumu a času v C ++ s príkladmi
- Metóda MongoDB Sort () s príkladmi