C++ STL có các hàm generic hữu ích như std::for_each. Tuy nhiên, chúng khá rườm rà nếu functor bạn muốn áp dụng chỉ dùng cho một hàm cụ thể. Giải pháp là dùng hàm vô danh (anonymous functions).
C++11 giới thiệu biểu thức lambda để tạo hàm vô danh.
Ví dụ
#include <iostream>
#include <vector>
#include <algorithm> // for_each
using namespace std;
int main() {
vector<int> myvector;
myvector.push_back(1);
myvector.push_back(2);
myvector.push_back(3);
for_each(myvector.begin(), myvector.end(), [](int x) {
cout << x * x << endl;
});
}Đầu ra
1 4 9
(int x) định nghĩa tham số lambda. [] dùng để capture biến từ phạm vi cục bộ vào bên trong lambda. Các lambda đơn giản có thể tự suy diễn kiểu. Có thể cung cấp kiểu tường minh:
Cú pháp đầy đủ
[](int x) -> double {
return x / 2.0;
}Tìm hiểu chi tiết lambda tại: https://stackoverflow.com/questions/7627098/what-is-a-lambda-expression-in-c11