[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;
}
posted @ 2024-08-11 22:55  yaoguyuan  阅读(4)  评论(0编辑  收藏  举报