[ capture-list ] ( params ) -> ret { body }
其中( params ) -> ret定义了这个匿名函数的参数和返回类型, { body }定义了这个匿名函数的功能,捕捉列表[ capture-list ]是做什么的呢?概括地讲,它使这个匿名函数可以访问外部(父作用域)变量。
以leetcode上的一个答案代码为例
auto cmp = [&nums1, &nums2](pair<int, int> a, pair<int, int> b) {
return nums1[a.first] + nums2[a.second] >
nums1[b.first] + nums2[b.second];
};
priority_queue<pair<int, int>, vector<pair<int, int>>,
decltype(cmp)> min_heap(cmp);
// []引用了num1,num2,定义了一个比较函数,并将函数赋值给cmp,相当于定义了一个cmp函数
// []除了应用外还可以按值捕捉,[&]捕捉所有引用,[=]捕捉所有值
// decltype()返回变量类型
再举个例子
int main() {
vector<int> data;
for (int i = 0; i < 10; ++i)
data.push_back(i);
sort(data.begin(), data.end(), [](int &a, int &b)->bool {
return a > b;
});
for (int i = 0; i < data.size(); ++i)
cout << data[i] << endl;
return 0;
}