📜  C++中的Lambda表达式(1)

📅  最后修改于: 2023-12-03 14:39:57.163000             🧑  作者: Mango

C++中的Lambda表达式介绍

什么是Lambda表达式?

Lambda表达式是C++11中新增的特性,是一种匿名函数(函数对象),可以简化某些函数的定义和调用。Lambda表达式可以看做一个临时创建的函数,没有函数名,但可以像函数一样使用。

Lambda表达式的语法

Lambda表达式的语法如下所示:

[capture list] (parameters) -> return-type {
    //function body
}
  • capture list:是一个允许我们从外部作用域捕获变量的列表。可以显式地将一个外部变量复制到Lambda表达式中。
  • parameters:Lambda表达式的参数列表。
  • return-type:Lambda表达式的返回值类型,可以省略,编译器会进行推断。
  • function body:Lambda表达式的函数体。

举个例子:

auto sum = [] (int a, int b) -> int {
    return a + b;
};
sum(1, 2); //输出3

这里我们使用Lambda表达式定义了一个求和运算,输入两个整数,返回它们的和。

Lambda表达式的应用

Lambda表达式的应用非常广泛,例如:

1. STL算法的使用

在STL算法中,我们可以使用Lambda表达式来定义一些谓词,例如筛选某些元素,对某些元素进行操作等。

vector<int> v = {1, 2, 3, 4, 5};
int sum = accumulate(v.begin(), v.end(), 0, [] (int a, int b) {
    return a + b;
});
//sum的值为1+2+3+4+5=15

这里我们使用了Lambda表达式来计算整个容器的和。

2. 多线程编程

在多线程编程中,Lambda表达式可以用来替代传统的函数指针,更加方便和灵活。

thread t([] {
    for (int i = 0; i < 10; i++) {
        cout << i << endl;
    }
});
t.join();

这里我们使用了Lambda表达式来创建一个新的线程,输出数字0到9。

3. GUI编程

在GUI编程中,Lambda表达式可以用来响应用户的操作,例如按下按钮,鼠标移动等。

QPushButton *button = new QPushButton("Click me");
QObject::connect(button, &QPushButton::clicked, [] {
    QMessageBox::information(nullptr, "Message", "Hello, world!");
});

这里我们使用了Lambda表达式来定义单击按钮后弹出对话框的操作。

总结

Lambda表达式是C++11中新增的特性,可以用来定义匿名函数,简化某些函数的定义和调用。Lambda表达式的语法比较简单,包含一个捕获列表、一个参数列表、一个返回值类型和一个函数体。Lambda表达式的应用非常广泛,主要包括STL算法、多线程编程和GUI编程等方面。