📅  最后修改于: 2023-12-03 15:17:11.480000             🧑  作者: Mango
在 C++ 中,Lambda 是一种函数对象,也称为匿名函数或闭包。Lambda 表达式可以捕获变量,可以在函数中传递或返回,或者作为 std::find_if 等 STL 算法的谓词使用。
std::find_if 是 STL 算法之一,用于在容器中查找符合特定条件的元素。它需要一个谓词参数,用于判断每个元素是否符合要求。
使用 Lambda 表达式作为 std::find_if 的谓词非常方便,下面是一个示例:
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> v = {1, 2, 3, 4, 5};
auto it = std::find_if(v.begin(), v.end(), [](int i) { return i % 2 == 0; });
if (it != v.end()) {
std::cout << "Found even number: " << *it << '\n';
}
else {
std::cout << "No even number found\n";
}
return 0;
}
在这个示例中,Lambda 表达式 [](int i) { return i % 2 == 0; }
用作 std::find_if 的谓词,判断一个整数是否为偶数。如果找到了符合条件的元素,则输出其值,否则输出“未找到”。
Lambda 表达式可以使用捕获列表来捕获变量,以便在函数体内使用。捕获列表可以为空,也可以包含一个或多个变量。
下面是一个使用 Lambda 表达式和捕获列表的示例:
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
int n = 3;
std::vector<int> v = {1, 2, 3, 4, 5};
auto it = std::find_if(
v.begin(),
v.end(),
[n](int i) {
return i % n == 0;
}
);
if (it != v.end()) {
std::cout << "Found multiple of " << n << ": " << *it << '\n';
}
else {
std::cout << "No multiple of " << n << " found\n";
}
return 0;
}
在这个示例中,Lambda 表达式使用了一个捕获列表 [n]
,以便在函数体内使用变量 n
。在这个例子中,Lambda 表达式查找容器中能被 n
整除的元素。
Lambda 表达式可以有参数列表,用于传递参数给 Lambda 函数。与普通函数类似,参数可以有默认值、类型推断等特性。
下面是一个使用 Lambda 表达式和参数列表的示例:
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
int n = 3;
std::vector<int> v = {1, 2, 3, 4, 5};
auto func = [n](int i) {
return i % n == 0;
};
auto it = std::find_if(v.begin(), v.end(), func);
if (it != v.end()) {
std::cout << "Found multiple of " << n << ": " << *it << '\n';
}
else {
std::cout << "No multiple of " << n << " found\n";
}
return 0;
}
在这个示例中,Lambda 表达式使用了参数列表 (int i)
,用于传递参数给 Lambda 函数。与普通函数类似,这个参数可以在函数体内使用。在这个例子中,Lambda 表达式查找容器中能被 n
整除的元素。
Lambda 表达式是一个非常强大的工具,可以用于编写更简洁、更具表现力的代码。在 STL 中,Lambda 表达式可以用作各种算法的谓词,使用起来非常方便。