【发布时间】:2019-05-30 11:18:58
【问题描述】:
我正在练习 lambda:
int main()
{
std::vector<int> v {1,2,3,4};
int count = 0;
sort(v.begin(), v.end(), [](const int& a, const int& b) -> bool
{
return a > b;
});
}
这只是来自 GeeksForGeeks 的代码,用于按降序排序,没什么特别的。我添加了一些打印语句(但在这篇文章中将它们取出)以查看 lambda 内部发生了什么。他们打印整个向量,以及 a 和 b 值:
1 2 3 4
a=2 b=1
2 1 3 4
a=3 b=2
3 2 1 4
a=4 b=3
4 3 2 1 <- final
所以我更详细的问题是:
将向量元素传递到a 和b 参数的顺序背后的逻辑是什么?
b 是否永久位于索引 0 而 a 正在迭代?如果是这样,传递给 lambda 的 second 参数停留在 first 元素是不是有点奇怪?它是特定于编译器的吗?谢谢!
【问题讨论】:
-
顺序取决于 std 库使用的排序算法。因此,如果您不知道使用哪种算法,您永远无法知道它们被调用的顺序。
-
为什么要使用
const int&参数? -
geeksforgeeks 上就是这样。我猜他们只是为了整洁或其他什么。在实际情况下,lambda 可能会改变 'a' 或 'b' 所以 const 不在。虽然不确定参考。 @curiousguy
标签: c++ sorting stl std strict-weak-ordering