lambdas c with examples
Научите све о Ламбда изразу на Ц ++ једноставним терминима.
Ламбда израз је најновији концепт на језику Ц ++ који је уведен од језика Ц ++ 11 надаље.
У овом упутству ћемо научити о ламбдама у Ц ++. Такође ћемо разговарати о томе како се ламбде могу дефинисати и користити у програму.
=> Овде погледајте комплетну серију обука за Ц ++.
Шта ћете научити:
Ламбда изрази / функције
Ламбде, како их обично зову, у основи су мали убачени исечци кода који се могу користити унутар функција или чак изјава позива функције. Нису именовани нити поново коришћени.
Ламбде можемо прогласити „аутоматским“ и користити их било где у програму.
Како се користи / пише ламбда?
Општа синтакса дефинисања ламбда је следећа:
(Capture clause) (parameter_list) mutable exception ->return_type { Method definition; }
Затвори затварање : Ламбда уводник према Ц ++ спецификацији.
Листа параметара : Такође се назива и ламбда декларација. Није обавезан и сличан је листи параметара методе.
Променљиво : Опционо. Омогућава модификовање променљивих обухваћених позивом по вредности.
изузетак : Спецификација изузетка. Опционо. Користите „ноекцепт“ да бисте назначили да ламбда не доноси изузетак.
Ретурн_типе : Опционо. Компајлер сам израчунава повратни тип израза. Али како ламбда постаје све сложенија, боље је укључити тип ретурн јер компајлер можда неће моћи да изведе тип ретурн.
Дефиниција методе : Ламбда тело.
Клаузула за хватање ламбда дефиниције користи се за одређивање које су променљиве забележене и да ли су забележене референцом или вредношћу.
Празно затварање хватања () означава да ламбда не користи ниједну променљиву, што значи да може да приступа само променљивим које су јој локалне.
Режим „подразумевано хватање“ указује на начин хватања изван променљивих на које се односи Ламбда:
- Затварање хватања (&) значи да се променљиве хватају референцом.
- Затварање хватања (=) указује на то да су променљиве забележене по вредности.
Ако имамо дефаулт-цаптуре и клаузулу цаптуре, тада не можемо имати идентификатор у снимању тог одређеног снимања може имати & идентификатор. Слично томе, ако клаузула за хватање садржи цаптуре-дефаулт =, тада клаузула за хватање не може имати идентификатор форм =. Такође, идентификатор или „ово“ не може се појавити више пута у клаузули за снимање.
То би требало да буде јасно из следећих примера.
(&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
Овде су сум, сум_вар и И променљиве које треба ухватити и користити у ламбда.
Доље је дат основни пример Ламбда израза у језику Ц ++.
#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; }
Излаз:
Збир две целобројне вредности: 11
Овде имамо уграђени ламбда израз за израчунавање збира две вредности. Навели смо врсту вредности а и б као целобројне.
Један од проблема са горњим кодом је тај што ради само за целе бројеве. Ако касније у програму желимо да додамо два дубла или низа или било који други тип, мораћемо да имамо те много ламбда. Ово није ефикасан начин програмирања.
Овај проблем можемо превазићи коришћењем параметара шаблона. Ово чини ламбде уопштене за све типове података. То се ради од Ц ++ 14 надаље.
Дакле, горњи програм ће бити измењен на следећи начин:
#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) = '< Излаз:
Збир (5,6) = 11
Збир (2.0,6.5) = 8.5
Збир ((стринг („СофтвареТестинг“), стринг („хелп.цом“)) = СофтвареТестингхелп.цом
Тако смо у овом програму користили генеричку ламбда суму која се може користити за проналажење збира два објекта било које врсте. Имајте на уму да смо користили кључну реч „ауто“ да бисмо назначили да ће се тип података параметра извести на основу података.
Да бисмо демонстрирали употребу ове ламбде, користили смо је са три различита типа података, инт, флоат и стринг. Из резултата сазнајемо да се према врсти података врши операција збрајања. На пример, када испоручујемо параметре низа ламбда зброју, он спаја два низа.
Закључак
Дошли смо до краја овог водича о ламбда изразима у језику Ц ++. Ово је најновији концепт на Ц ++-у и може бити од велике помоћи када треба да извршимо мали исечак кода у линији. Ламбда се такође може учинити генеричким и користити за све типове података.
У нашем предстојећем упутству разговараћемо о неким додатним темама на језику Ц ++ као што су време, стандардни улаз / излаз и евидентирање.
како уклонити елемент из низа јава
=> Овде прочитајте популарне серије обуке за Ц ++.
Препоручено читање
- Шта је упоредно тестирање (научите на примерима)
- Водич за Питхон ДатеТиме са примерима
- Изрежи команду у Унику са примерима
- Синтакса наредбе Уник Цат, опције са примерима
- Употреба курсора у МонгоДБ са примерима
- Лс наредба у Унику са примерима
- Функције датума и времена у Ц ++ са примерима
- МонгоДБ метода сортирања () са примерима