我刚刚看了STL 的这个关于 STL 的讲座。
在讲座开始大约 57 分钟后,我们得到了以下代码:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
int main()
{
std::vector<std::string> v;
v.push_back("cat");
v.push_back("antelope");
v.push_back("puppy");
v.push_back("bear");
std::sort(v.begin(), v.end(),
[](const std::string& left, const std::string& right)
{
return left.size() < right.size();
}
);
for (std::vector<std::string>::iterator i = v.begin(); i != v.end(); ++i)
{
std::cout << *i << " ";
}
std::cout << std::endl;
return 0;
}
正如预期的那样,这将按长度递增的顺序打印向量中的字符串。我的问题是关于 lambda 表达式,它是sort
函数的第三个参数。在内部,传递给输入参数“left”和“right”的是什么?
我添加了这一行:
std::cout << "left: " << left << ", right: " << right << std::endl;
在 lambda 体内,我得到的输出是:
左:羚羊 右:猫
左:羚羊 右:猫
左:小狗 右:猫
左:小狗 右:羚羊
左:小狗 右:猫
左:熊 右:猫
左:熊 右:羚羊
左:熊,右:小狗
左:熊,右:
猫猫熊小狗羚羊
所以看起来“左”和“右”参数在某种程度上与内部排序算法有关。谁能更清楚地了解到底发生了什么?
我的理解是,如果 lambda 是一元函数,那么它的输入参数将是迭代器当前指向的任何内容。这个对吗?
但是对于二进制函数,输入参数让我感到困惑。