lambdas c with examples
Дізнайтеся все про вираз лямбди в C ++ простими словами.
Лямбда-вираз - це найновіша концепція в C ++, яка була запроваджена з C ++ 11 і далі.
У цьому підручнику ми дізнаємося про лямбди в C ++. Ми також обговоримо, як лямбди можна визначити та використовувати в програмі.
=> Ознайомтесь із Повною серією навчальних програм C ++ тут.
Що ви дізнаєтесь:
Лямбда-вирази / функції
Лямбди, як їх зазвичай називають, - це в основному невеликі вбудовані фрагменти коду, які можна використовувати всередині функцій або навіть операторів виклику функцій. Вони не називаються і не використовуються повторно.
Ми можемо оголосити лямбди як “автоматичні” та використовувати їх у будь-якому місці програми.
Як користуватися / писати лямбда?
Загальний синтаксис визначення лямбда такий:
(Capture clause) (parameter_list) mutable exception ->return_type { Method definition; }
Закриття захоплення : Лямбда-інтродуктор відповідно до специфікації C ++.
додавання елементів до масиву java
Список параметрів : Також називається лямбда-декларацією. Необов’язковий і подібний до списку параметрів методу.
Змінний : Необов’язково. Дозволяє змінювати змінні, захоплені викликом за значенням.
виняток : Специфікація винятків. Необов’язково. Використовуйте “noexcept”, щоб вказати, що лямбда не створює винятків.
Тип_повернення : Необов’язково. Компілятор самостійно визначає тип повернення виразу. Але оскільки лямбди ускладнюються, краще включати тип return, оскільки компілятор може не змогти вивести тип return.
Визначення методу : Лямбда-тіло.
Пункт захоплення лямбда-визначення використовується для вказівки того, які змінні захоплюються та чи вони зафіксовані за допомогою посилання чи значення.
Порожнє закриття захоплення () вказує на те, що лямбда не використовує жодних змінних, що означає, що він може отримати доступ лише до локальних до нього змінних.
Режим «захоплення за замовчуванням» вказує, як робити захоплення поза змінними, на які посилається Лямбда:
- Закриття захоплення (&) означає, що змінні фіксуються за допомогою посилання.
- Закриття захоплення (=) означає, що змінні фіксуються за значенням.
Якщо у нас є захоплення-за замовчуванням і пропозиція захоплення, тоді ми не можемо мати ідентифікатор у захопленні того конкретного захоплення може мати & ідентифікатор. Подібним чином, якщо пропозиція захоплення містить 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
запитання та відповіді на співбесіду для тестування pdf
Тут ми маємо вбудований лямбда-вираз для обчислення суми двох значень. Ми вказали тип значень 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
Таким чином, у цій програмі ми використали загальну лямбда-суму, яка може бути використана для пошуку суми двох об’єктів будь-якого типу. Зверніть увагу, що ми використовували ключове слово „auto”, щоб вказати, що тип даних параметра буде виводитися на основі даних.
Щоб продемонструвати використання цієї лямбди, ми використали її з трьома різними типами даних, int, float та string. З вихідних даних ми знаємо, що відповідно до типу даних здійснюється операція підсумовування. Наприклад, коли ми надаємо параметри рядка до лямбда-суми, він об'єднує ці два рядки.
Висновок
Ми підійшли до кінця цього посібника з лямбда-виразів на C ++. Це найновіша концепція в C ++ і може бути дуже корисною, коли нам потрібно виконати невеликий фрагмент коду вбудовано. Лямбди також можна зробити загальними та використовувати для всіх типів даних.
У нашому майбутньому підручнику ми обговоримо деякі додаткові теми в C ++, такі як час, стандартне введення / виведення та реєстрація.
=> Ознайомтесь з Популярною серією навчальних програм C ++ тут.
Рекомендована література
- Що таке порівняльне тестування (Дізнайтеся на прикладах)
- Підручник із прикладами Python DateTime
- Вирізати команду в Unix з прикладами
- Синтаксис команд Unix Cat, варіанти з прикладами
- Використання курсору в MongoDB з прикладами
- Команда Ls в Unix з прикладами
- Функції дати та часу в C ++ з прикладами
- Метод сортування MongoDB () із прикладами