在Linux下的C++編程中,Lambda表達式是一種非常方便的特性,它允許你在代碼中定義匿名函數。Lambda表達式通常用于簡化代碼,特別是在需要傳遞一個簡單的函數對象或回調函數時。
Lambda表達式的基本語法如下:
[捕獲列表](參數列表) -> 返回類型 {
// 函數體
}
捕獲列表:捕獲列表是可選的,用于指定Lambda表達式可以訪問的外部變量。捕獲方式有值捕獲和引用捕獲兩種。
[=]
表示按值捕獲所有外部變量。[&]
表示按引用捕獲所有外部變量。[=, &var1, &var2]
。[var1, &var2]
。參數列表:與普通函數的參數列表相同,可以為空。
返回類型:與普通函數的返回類型相同,可以省略,編譯器會自動推導。
下面是一些使用Lambda表達式的例子:
#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;
}
#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;
}
#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;
}
#include <iostream>
#include <functional>
int main() {
// 定義一個無參數的Lambda表達式
auto sayHello = []() {
std::cout << "Hello, World!" << std::endl;
};
sayHello(); // 調用Lambda表達式
return 0;
}
Lambda表達式在C++編程中非常有用,特別是在需要傳遞函數對象或回調函數時。通過合理使用Lambda表達式,可以使代碼更加簡潔和易讀。