[ 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;
}
本文深入探讨C++中Lambda表达式的使用,包括其参数、返回类型、捕捉列表的定义及作用,通过实例展示了如何利用Lambda表达式进行比较函数的定义和数据排序,是理解与运用C++ Lambda表达式不可或缺的指南。
564

被折叠的 条评论
为什么被折叠?



