[Lang] Lambda表达式
[Lang] Lambda表达式
1. Lambda表达式的语法
[capture](parameters) -> return_type {
body
};
- capture:捕获外部作用域变量的方式。
- parameters:参数列表,类似于普通函数。
- -> return_type(可选):返回类型。如果省略,编译器会自动推断。
- body:函数体,包含需要执行的代码。
2. Lambda表达式 对比 仿函数
Lambda表达式在需要定义简单的、一次性的操作时非常有用,可以显著减少样板代码,提升代码的简洁性和可读性。
仿函数:
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
class Person {
public:
Person(string name, int age) : name(name), age(age) {}
string name;
int age;
};
// 仿函数(谓词)类定义
class CompareByAge {
public:
bool operator()(const Person &a, const Person &b) const {
return a.age < b.age;
}
};
int main() {
vector<Person> people = {
Person("Alice", 25),
Person("Bob", 30),
Person("Charlie", 20),
};
// 使用仿函数(谓词)对象进行排序
sort(people.begin(), people.end(), CompareByAge());
// C++11新特性:使用auto关键字自动推导类型
// C++11新特性:range-based for loop
for (const auto &person : people) {
cout << person.name << " " << person.age << endl;
}
return 0;
}
Lambda表达式:
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
class Person {
public:
string name;
int age;
};
int main() {
vector<Person> people = {
Person{"Alice", 25},
Person{"Bob", 30},
Person{"Charlie", 20},
};
// 使用Lambda表达式进行排序
sort(people.begin(), people.end(), [](const Person &a, const Person &b) {
return a.age < b.age;
});
for (const auto &person : people) {
cout << person.name << " " << person.age << endl;
}
return 0;
}