lambdas c with examples
Научете всичко за ламбда израза в C ++ с прости думи.
Ламбда-изразът е най-новата концепция в C ++, въведена от C ++ 11 нататък.
В този урок ще научим за ламбдите в C ++. Също така ще обсъдим как ламбдите могат да бъдат дефинирани и използвани в програмата.
=> Проверете тук пълната серия за обучение на C ++.
Какво ще научите:
Ламбда изрази / функции
Lambdas, както обикновено се наричат, всъщност са малки вградени фрагменти от код, които могат да се използват вътре във функции или дори оператори за извикване на функции. Те не се назовават или използват повторно.
Можем да декларираме ламбдите като „автоматични“ и да ги използваме навсякъде в програмата.
Как да използвам / пиша Lambdas?
Общият синтаксис на дефинирането на ламбда е както следва:
(Capture clause) (parameter_list) mutable exception ->return_type { Method definition; }
Затваряне на улавяне : Ламбда въвеждач съгласно спецификацията на C ++.
Списък с параметри : Нарича се също като ламбда декларации. Не е задължително и е подобно на списъка с параметри на метод.
Променлив : По избор. Позволява променливите, уловени от повикване по стойност, да бъдат модифицирани.
изключение : Спецификация на изключението. По желание. Използвайте “noexcept”, за да посочите, че ламбда не създава изключение.
Тип_възврат : По избор. Компилаторът самостоятелно определя типа на връщане на израза. Но тъй като ламбдите стават по-сложни, по-добре е да включите тип return, тъй като компилаторът може да не успее да изведе типа return.
Определение на метода : Ламбда тяло.
Клауза за улавяне от дефиниция на ламбда се използва, за да се определи кои променливи се улавят и дали се улавят чрез препратка или стойност.
Празно затваряне на улавяне (), показва, че ламбда не използва променливи, което означава, че може да има достъп само до променливи, които са локални за нея.
Режимът „улавяне-по подразбиране“ показва как да се улавя извън променливите, посочени в Lambda:
- Затварянето на улавяне (&) означава, че променливите се улавят чрез препратка.
- Затварянето на улавяне (=) показва, че променливите се улавят по стойност.
Ако имаме по подразбиране улавяне и клауза за улавяне, тогава не можем да имаме идентификатор в улавянето на това конкретно улавяне може да има и идентификатора. По същия начин, ако клаузата за улавяне съдържа capture-default =, тогава клаузата за улавяне не може да има идентификатора form =. Също така идентификатор или ‘това’ не може да се появи повече от веднъж в клаузата за улавяне.
Това трябва да стане ясно от следващите примери.
(&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
Тук sum, sum_var и I са променливите, които трябва да бъдат уловени и използвани в ламбда.
По-долу е даден основен пример за ламбда израз в 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; }
Изход:
Сума от две цели числа: 11
Тук имаме вграден ламбда израз за изчисляване на сумата от две стойности. Посочихме типа стойности a и b като цели числа.
Един проблем с горния код е, че той работи само за цели числа. Ако по-късно в програмата искаме да добавим две двойни или низове или всякакви други типове, ще трябва да имаме тези много ламбди. Това не е ефективен начин за програмиране.
Можем да преодолеем този проблем, като използваме параметри на шаблона. Това прави ламбдите обобщени за всички типове данни. Това се прави от C ++ 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
Сума ((низ („SoftwareTesting“), низ („help.com“)) = SoftwareTestinghelp.com
как да играя .swf файлове
По този начин в тази програма сме използвали обща ламбда сума, която може да се използва за намиране на сумата на двата обекта от всякакъв тип. Имайте предвид, че използвахме ключова дума „auto“, за да посочим, че типът данни на параметъра ще бъде изведен въз основа на данните.
За да демонстрираме използването на тази ламбда, ние я използвахме с три различни типа данни, int, float и string. От изхода знаем, че според вида на данните се извършва операция по сумиране. Например, когато доставяме параметри на низове към ламбда сума, това обединява двата низа.
Заключение
Стигнахме до края на този урок за ламбда изрази в C ++. Това е най-новата концепция в C ++ и може да бъде много полезно, когато трябва да изпълним малък фрагмент от код вграден. Lambdas също могат да бъдат направени общи и да се използват за всички типове данни.
В нашия предстоящ урок ще обсъдим някои от допълнителните теми в C ++ като време, стандартен вход / изход и регистриране.
=> Прочетете Популярната серия за обучение на C ++ тук.
Препоръчително четене
- Какво е сравнително тестване (научете с примери)
- Урок за Python DateTime с примери
- Изрежете командата в Unix с примери
- Синтаксис на командата Unix Cat, Опции с примери
- Използване на курсора в MongoDB с примери
- Ls Command в Unix с примери
- Функции за дата и час в C ++ с примери
- Метод за сортиране на MongoDB () с примери