C++ Lambda表达式学习笔记
1. 了解C++ Lambda表达式的基本概念
- 作用:Lambda表达式是一种匿名函数,可以在需要函数的地方直接定义函数体,而无需另外命名函数。
- 优势:Lambda表达式使得代码更加简洁,提高了可读性,尤其适用于短小的函数或者需要临时定义函数的场景。
- 发展历程:Lambda表达式是C++11引入的新特性,通过简洁的语法实现了匿名函数的定义。
示例代码:
auto sum = [](int a, int b) { return a + b; }; // 定义一个Lambda表达式
int result = sum(3, 4); // 调用Lambda表达式
std::cout << "Result: " << result << std::endl;
2. 学习C++ Lambda表达式的多种应用场景
- 函数对象替代:Lambda表达式可以直接定义函数对象,用于替代传统的函数对象或函数指针。
- STL算法应用:Lambda表达式可以作为STL算法函数的参数,用于对容器元素进行灵活的处理。
- 事件处理:Lambda表达式可以作为回调函数,用于处理事件或异步操作的回调逻辑。
示例代码:
// Lambda表达式作为函数对象
std::vector<int> nums = {1, 2, 3, 4, 5};
std::for_each(nums.begin(), nums.end(), [](int x) { std::cout << x << " "; });
// Lambda表达式作为STL算法函数的参数
auto greaterThan3 = std::count_if(nums.begin(), nums.end(), [](int x) { return x > 3; });
// Lambda表达式作为回调函数
std::thread t([]() { std::cout << "Thread running..." << std::endl; });
t.join();
3. 掌握C++ Lambda表达式的使用技巧
- 捕获列表:Lambda表达式可以通过捕获列表捕获外部变量,使得Lambda函数能够访问其作用域外的变量。
- 参数列表:Lambda表达式可以指定参数列表,定义输入参数,用于接收传递给Lambda函数的参数。
- 返回类型:Lambda表达式可以指定返回类型,或使用自动类型推导来推断返回类型。
示例代码:
int value = 10;
auto lambda = [value](int x) -> int { return x + value; }; // 捕获外部变量并指定返回类型
int result = lambda(5); // 调用Lambda表达式
4. 实战案例分析
- STL算法应用:Lambda表达式可以与STL算法结合使用,实现灵活的数据处理和操作。
- 事件处理:Lambda表达式可以作为事件处理函数,用于处理GUI程序或异步操作中的事件。
- 线程编程:Lambda表达式可以作为线程函数,用于多线程编程中,简化线程的创建和管理。
示例代码:
// 使用Lambda表达式求取向量中的偶数个数
std::vector<int> nums = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int evenCount = std::count_if(nums.begin(), nums.end(), [](int x) { return x % 2 == 0; });
std::cout << "Even count: " << evenCount << std::endl;
// 使用Lambda表达式作为按钮点击事件处理函数
Button button;
button.onClick([]() { std::cout << "Button clicked!" << std::endl; });
// 使用Lambda表达式创建线程
std::thread t([]() { std::cout << "Thread running..." << std::endl; });
t.join();