📜  lambda 作为 std::find_if 谓词 - C 编程语言(1)

📅  最后修改于: 2023-12-03 15:17:11.480000             🧑  作者: Mango

Lambda 作为 std::find_if 谓词 - C 编程语言

在 C++ 中,Lambda 是一种函数对象,也称为匿名函数或闭包。Lambda 表达式可以捕获变量,可以在函数中传递或返回,或者作为 std::find_if 等 STL 算法的谓词使用。

使用 Lambda 作为 std::find_if 谓词

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 表达式可以使用捕获列表来捕获变量,以便在函数体内使用。捕获列表可以为空,也可以包含一个或多个变量。

下面是一个使用 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 函数。与普通函数类似,参数可以有默认值、类型推断等特性。

下面是一个使用 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 表达式可以用作各种算法的谓词,使用起来非常方便。