Lambda 表达式在 C++中是一个非常强大且灵活的特性,它在以下场景中会特别有用:
1. 算法
Lambda 表达式可以用来简化代码,特别是在需要定义短小的匿名函数时。例如,在 STL 算法(如std::sort
)中传递自定义比较函数时:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include <algorithm> #include <vector> #include <iostream>
int main() { std::vector<int> vec = {1, 5, 3, 4, 2}; std::sort(vec.begin(), vec.end(), [](int a, int b) { return a < b; }); for (int n : vec) { std::cout << n << " "; } return 0; }
|
1 2 3 4
| auto it = std::find_if(m_servers.begin(), m_servers.end(), [&](const VxiServerInfo& server) { return server.session_name == session_name; });
|
2. 捕获局部变量
Lambda 表达式可以捕获所在作用域内的变量,这样可以在回调或处理函数中使用这些变量,而不需要传递额外的参数:
1 2 3 4 5
| int x = 10; auto add_x = [x](int y) { return x + y; }; std::cout << add_x(5) << std::endl;
|
3. 并行和异步编程
在并行和异步编程中,lambda 表达式经常用于定义线程函数或异步任务的工作内容。例如,使用std::async
:
1 2 3 4 5 6 7 8 9 10 11 12
| #include <future> #include <iostream>
int main() { auto future = std::async([]() { std::this_thread::sleep_for(std::chrono::seconds(2)); return 42; }); std::cout << "等待结果..." << std::endl; std::cout << "结果是: " << future.get() << std::endl; return 0; }
|
4. 事件处理
在 GUI 编程或事件驱动的编程模型中,lambda 表达式可用于定义事件处理器:
1 2 3 4 5 6 7 8 9 10 11 12 13
| #include <functional> #include <iostream>
void button_click(std::function<void()> callback) { callback(); }
int main() { button_click([]() { std::cout << "按钮被点击了!" << std::endl; }); return 0; }
|
5. 通用编程
在模板编程中,lambda 表达式可以用作函数对象,特别是在需要高效、内联的函数对象时:
1 2 3 4 5 6 7 8 9 10 11
| #include <iostream>
template <typename Func> void apply(Func func) { std::cout << func(5) << std::endl; }
int main() { apply([](int x) { return x * x; }); return 0; }
|
通过使用 lambda 表达式,你可以写出更简洁、高效和易于维护的代码。