Lambda表达式

为什么

  • 简洁

  • 可以实现函数对象局部定义

  • 能够捕获作用域中对象

  • 在算法中使用方便

是什么

内嵌的匿名函数 定义后自动生成一个匿名类

  • 语法

      [捕获列表](参数)mutable->int{return}
    
    • 中括号起手, [=] 捕获全部

    • 加上 mutable 可以改变捕获到的参数

    • 例:

      	// 算法中使用
      	std::vector<int> numbers = { 3, 1, 4, 1, 5, 9, 2, 6 };
      	sort(numbers.begin(),numbers.end(),[](int a, int b){
      		return a>b;
      	});
      	for(int i:numbers)
      		cout<<i<<" ";
      	cout<<endl;
      
      	// 引用, 是引用外部的
      	int a = 10;int b = 20;
      	auto lambda_add = [&a,&b](){
      		a++;
      		return a+b;
      	};
      	cout<<lambda_add()<<endl;
      	cout<<"a = "<<a<<endl;
      
      	// 不加引用就是改变生成的对象的值 mutable
      	int v1=42;
      	auto f=[v1] () mutable->int{return v1++; };
      	v1=0;
      	auto j=f(); //j 为 43
      	v1 = 100;
      	auto k=f(); //k 为 44
      	cout<<"j = "<<j<<endl<<"k = "<<k<<endl;
      
      • 输出

          ```
          9 6 5 4 3 2 1 1 
          31
          a = 11
          j = 42
          k = 43
          ```
        
posted @ 2023-08-08 21:12  无形深空  阅读(3)  评论(0编辑  收藏  举报