【发布时间】:2021-11-16 23:47:34
【问题描述】:
我不熟悉在 C++ 中使用 lambda 函数。我一直在研究网络,找到了几篇解释 lambda 函数的语法和用途的文章,但我没有找到明确解释如何编写 lambda 函数的内部逻辑的文章。
例如
在 c++ 中按降序对向量进行排序时:
sort(v1.begin(), v1.end(), [](const int &a, const int &b){return b < a;});
我写了上面的代码。在这里,我有几个问题:
-
为什么我在 lambda 函数中只提供两个参数?为什么不是三个?或者我为什么不给出所有的 n 参数(n 是向量的大小)并做一个逻辑?我不是要找到最多两个元素,而是要对向量进行排序,为什么只考虑两个值?
-
为什么 a > b 是降序排列?为什么不是 b > a? lambda 函数内部是否有任何排序?
-
上述lambda函数的返回值是false(0)还是true(1)?为什么我只需要返回 false(0) 或 true(1) 来排序?为什么我不能返回一个字符进行排序,比如让我们假设返回值 'a' 它是升序的,而返回值 'd' 它是降序的?
再次
在寻找最大偶数元素时
itr = max_element(v1.begin(), v1.end(), [](const int &a, const int &b){
if (isEven(a) && isEven(b)) {
return (a < b);
} else
return false;
}
);
我要返回 b > a。而不是a大于b。 ???
任何建议将不胜感激。
【问题讨论】:
-
听起来你可以使用good C++ book。您的许多问题以及更多问题都包含在其中。
-
这些问题中的大多数并不是关于 lambda 的,而是关于
std::sort的第三个参数。具体来说,这里是third overload。sort(begin, end, comp)是说“对范围[begin, end)从最小到最大进行排序,使用comp来确定‘最小’的实际含义”。
标签: c++ function c++11 lambda stl-algorithm