溫馨提示×

Linux C++編程中如何使用Lambda表達式

小樊
51
2025-05-22 11:36:59
欄目: 編程語言

在Linux下的C++編程中,Lambda表達式是一種非常方便的特性,它允許你在代碼中定義匿名函數。Lambda表達式通常用于簡化代碼,特別是在需要傳遞一個簡單的函數對象或回調函數時。

Lambda表達式的基本語法如下:

[捕獲列表](參數列表) -> 返回類型 {
    // 函數體
}
  • 捕獲列表:捕獲列表是可選的,用于指定Lambda表達式可以訪問的外部變量。捕獲方式有值捕獲和引用捕獲兩種。

    • 值捕獲:[=] 表示按值捕獲所有外部變量。
    • 引用捕獲:[&] 表示按引用捕獲所有外部變量。
    • 混合捕獲:可以指定具體要捕獲的變量,如 [=, &var1, &var2]。
    • 顯式捕獲:可以逐個捕獲變量,如 [var1, &var2]。
  • 參數列表:與普通函數的參數列表相同,可以為空。

  • 返回類型:與普通函數的返回類型相同,可以省略,編譯器會自動推導。

下面是一些使用Lambda表達式的例子:

示例1:基本用法

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 使用Lambda表達式對vector進行排序
    std::sort(vec.begin(), vec.end(), [](int a, int b) {
        return a < b;
    });

    for (int num : vec) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

示例2:捕獲外部變量

#include <iostream>
#include <functional>

int main() {
    int x = 10;
    int y = 20;

    // 捕獲外部變量x和y
    auto add = [x, y]() {
        return x + y;
    };

    std::cout << "Sum: " << add() << std::endl; // 輸出 Sum: 30

    return 0;
}

示例3:混合捕獲

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    int factor = 2;

    // 按值捕獲factor,按引用捕獲vec
    std::transform(vec.begin(), vec.end(), vec.begin(), [factor, &vec](int num) {
        return num * factor;
    });

    for (int num : vec) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

示例4:無參數Lambda表達式

#include <iostream>
#include <functional>

int main() {
    // 定義一個無參數的Lambda表達式
    auto sayHello = []() {
        std::cout << "Hello, World!" << std::endl;
    };

    sayHello(); // 調用Lambda表達式

    return 0;
}

Lambda表達式在C++編程中非常有用,特別是在需要傳遞函數對象或回調函數時。通過合理使用Lambda表達式,可以使代碼更加簡潔和易讀。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女