欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

轻松理解C++中的lambda表达式与sort函数操作

最编程 2024-07-30 06:57:01
...
  • 语法
    [ capture list ] ( parameter list) -> return type { function body; };
    [捕获列表]( 参数列表 ) -> 返回值类型{函数体}
  • 参数列表和返回类型可以为空,但是捕获列表和函数体不能为空
    auto f = []{return 42};
    auto f = [](int a) -> int { return a + 1; };
    std::cout << f(1) << std::endl;  // 输出: 2
    
  • 捕获列表
  • [] 不捕获任何变量。
  • [&] 捕获外部作用域中所有变量,并作为引用在函数体中使用(按引用捕获)。
  • [=] 捕获外部作用域中所有变量,并作为副本在函数体中使用(按值捕获)。
  • [=,&foo] 按值捕获外部作用域中所有变量,并按引用捕获 foo 变量。
  • [bar] 按值捕获 bar 变量,同时不捕获其他变量。
  • [this] 捕获当前类中的 this 指针,让 lambda 表达式拥有和当前类成员函数同样的访问权限。如果已经使用了 & 或者 =,就默认添加此选项。捕获 this 的目的是可以在 lamda 中使用当前类的成员函数和成员变量。
  • 在 sort中的用法,在leetcode题解中看到的,使用lambda 表达式自定义排序规则。
sort(people.begin(), people.end(), [](const vector<int>& u, const vector<int>& v) {
   return u[0] < v[0] || (u[0] == v[0] && u[1] > v[1]);
 });

有关知识点可看https://blog.****.net/u013390476/article/details/50424995

  • 默认状态下,sort只有两个参数,默认按照vector中的对象operator< 即从小到大排列。
  • 第三个参数可以是一个谓词,自定义排序规则。
    • 谓词可以是一个函数指针,此函数有两个参数,返回bool值,即比较两个对象,想要的顺序就返回ture。
    • 谓词还可以是lambda,来自定义排序规则。

推荐阅读