C++和C#中lambda表达式都是一种可以在运行时定义匿名函数的语法,它所属的范畴属于闭包。在函数式编程中,lambda表达式可以替代匿名函数来传递操作。下面将分别对C++和C#中的lambda表达式进行详细讲解。
C++中的lambda表达式
在C++11中,lambda表达式的语法为:
[capture list] (parameters) -> return-type { statement }
各项说明:
- capture list
:捕获列表,使用“[]”括起来,用来定义当前lambda表达式所需捕获的变量和类成员变量列表。可以是值捕获,引用捕获或者不捕获。
- parameters
:参数列表,使用括号“()”括起来,定义lambda表达式的参数。
- return-type
:返回值类型,使用“->”箭头指向返回类型。
- statement
:语句块,使用大括号“{}”括起来,定义lambda表达式的函数体。
下面是一个简单的示例:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int> nums = {2, 5, 1, 7, 4};
sort(nums.begin(), nums.end(), [](int a, int b) {return a < b;});
for (auto it : nums)
{
cout << it << " ";
}
return 0;
}
上述代码中,使用了lambda表达式定义排序函数。[](int a, int b) {return a < b;}
表示将a和b进行比较,如果a小于b则返回true。这个lambda表达式用于对sort
函数进行自定义排序。
C#中的lambda表达式
在C#中,lambda表达式的语法为:
(parameters) => expression
各项说明:
- parameters
:参数列表,使用括号“()”括起来。
- expression
:表达式,lambda表达式的函数体,由于闭包,可以捕获外层变量。
下面是一个简单的示例:
using System;
using System.Collections.Generic;
using System.Linq;
namespace LambdaDemo
{
class Program
{
static void Main(string[] args)
{
var nums = new List<int>() { 2, 5, 1, 7, 4 };
var result = nums.OrderBy(x => x);
foreach (var it in result)
{
Console.Write(it + " ");
}
Console.ReadKey();
}
}
}
上述代码中,使用了lambda表达式定义排序函数。x => x
表示将x进行排序并返回。这个lambda表达式用于对OrderBy
函数进行自定义排序。
总结
C++和C#中的lambda表达式都可以用于定义匿名函数,形式有所不同,但实质是一致的。在实际开发中,lambda表达式可以大大简化代码,提高开发效率。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++ 和 C# 中的 lambda的方法技巧 - Python技术站