Lambda Expression

一、什么是Lambda Expression ? 作用是什么?

  • Lambda Expression是匿名函数的一种表达方式,就是没有函数名的函数。
  • 用途:函数作为参数传递时,可以直接传Lambda Expression,而不用先定义一个函数,再传函数名。

二、语法

[捕获列表](参数列表) -> 返回类型 { 函数体 }
如:[](const string& name) -> void { cout << "My dear " << name << "I love you "<<endl; };

  • 参数列表:如果没有参数列表,()可以省略不写。不支持默认参数。
  • 返回类型:不写,自动推断。
  • 捕获列表:捕获的本质还是参数传递。
   
        // 捕获方式有值捕获和引用捕获两种,值、引用可以混合使用
	int i = 10;
	int  j = 20;
	auto f1 = [ =, &i] () { return j + i; };  // 全部值捕获,i引用捕获
	auto f2 = [ &, j] () { return i; };       // 全部引用捕获,j值捕获

	// 区别:值捕获的变量不能在lambda函数体内修改,引用可以
}

三、示例

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

void show(const int& num)
{
	cout<<"My Dear, you're my "<<num<<endl;
}

class c_show
{
public:
	void operator()(const int& num)const
	{
		cout<<"My Dear, you're my "<<num<<endl;
	}
};

int main()
{
	vector<int> vec={1,2,3,4,5};
	for_each(vec.begin(),vec.end(),show);        // 普通函数,填函数名
	for_each(vec.begin(),vec.end(),c_show());    // 仿函数,填匿名对象

	//函数参数是lambda表达式,直接定义一个匿名函数,而非显示定义再传函数名
	for_each(vec.begin(),vec.end(),
		[](const int& num)
		{
			cout<<"My Dear, you're my "<<num<<endl;
		});

	// 或者给lambda函数起名字f
	auto f=[](const int& num){ cout<<"My Dear, you're my "<<num<<endl; };
	for_each(vec.begin(),vec.end(),f);

	// lambda函数可以单独使用
	f(88);
}

应用:
**1. 排序遍历等stl算法**
vector<int> v = {1, 2, 3, 4, 5};
sort(v.begin(), v.end(), [](int a, int b) { return a > b; });   // 降序排序

**2. 作为回调函数**
void doSomething(function<void()> func) {
    func();
}
doSomething([]() { cout << "Lambda as callback\n"; });
posted @   itsinsane  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示