Advertisement
Derga

Untitled

Feb 26th, 2023
441
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.84 KB | None | 0 0
  1. /*
  2. https://en.cppreference.com/w/cpp/language/lambda
  3.  
  4. Лямбда-выражениями называются безымянные локальные функции,
  5. которые можно создавать прямо внутри какого-либо выражения.
  6. Лямбда-выражения в C++ — это краткая форма записи анонимных функторов.
  7. Другими словами, это просто синтаксический сахар.
  8. Синтаксис лямбда-функции определяется как: [capture list] (parameters) -> return-type {method definition}.
  9. Обычно компилятор оценивает тип возврата самой лямбда-функции.
  10. */
  11.  
  12. #include <algorithm>
  13. #include <cassert>
  14. #include <iostream>
  15. #include <vector>
  16.  
  17. using namespace std;
  18.  
  19. struct Student {
  20.     int age;
  21.     string name;
  22. };
  23.  
  24. int main() {
  25.     vector<int> nums = { 9, 7, 6, 3, 5, 4, 1, 2, 8, 0 };
  26.     sort(begin(nums), end(nums), [] () {}); //реализовать лямбду такую, что числа были отсортированы по возрастанию
  27.    
  28.     vector<int> sorted_nums = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
  29.     assert(nums == sorted_nums);
  30.    
  31.     vector<Student> students = { {17,"Mary"}, {18, "Vasya"}, {21, "Oleg"}, {17, "Sasha"}, {19, "Vanya"} };
  32.     //используя стандартную сортировку с лямбда выражением отсортировать вектор структур по возрасту
  33.     //и вывести на экран результат
  34.    
  35.     //используя стандартную сортировку с лямбда выражением отсортировать вектор students по имени
  36.     //и вывести на экран результат
  37.  
  38.     //используя стандартную сортировку с лямбда выражением отсортировать вектор students
  39.     //сначала по возрасту, а в случае равенства возрастов - по имени.
  40.     //и вывести на экран результат
  41.  
  42.     //определить лямбду, которая будет складывать два числа
  43.     //auto sum = () [] {};
  44.     assert(4, sum(2, 2));
  45.  
  46.     /*
  47.     на собеседовниях иногда спрашивают про типы захывата переменных в лямбдах
  48.     вот коротко если -
  49.    
  50.     The capture list defines what from the outside of the lambda
  51.     should be available inside the function bodyand how.It can be either :
  52.    
  53.     1) a value : [x]
  54.     2) a reference[&x]
  55.     3) any variable currently in scope by reference[&]
  56.     4) same as 3, but by value[=]
  57.     */
  58.  
  59.     return 0;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement