应该向C++Lambda传递多少个参数
How Many Parameters Should Be Passed to C++ Lambda?
我对c++11真的很陌生,所以在理解lamda
表达式的同时,我充满了怀疑。我无法理解应该向lamda
表达式传递多少参数。
像
vector<int> v {4, 1, 3, 5, 2, 3, 1, 7};
vector<int>:: iterator p = find_if(v.begin(), v.end(), [](int i)
{
return i > 4;
});
这里只有一个参数被传递给CCD_ 3函数。以及值i是什么以及从哪里传递到CCD_ 4。
但在下面的情况下,2个参数通过
sort(v.begin(), v.end(), [](const int& a, const int& b) -> bool
{
return a > b;
});
这两个值从哪里传递到λ,请解释一下,请澄清我的疑虑
标准库中需要一个或多个谓词的每个算法都对给定的谓词有特定的要求。如果您查看std::find_if
:
template< class InputIt, class UnaryPredicate >
InputIt find_if( InputIt first, InputIt last, UnaryPredicate p );
一元谓词p
的要求是:
p
—返回的一元谓词对于所需元素为true。对于类型为(可能是
const
)VT
的每个参数v
,表达式p(v)
必须可转换为bool
,其中VT
是InputIt
的值类型,与值类别无关,并且不得修改v
。[…]
这意味着类型UnaryPredicate
必须提供类似于(在您的情况下)的呼叫运算符:
bool operator()(int const&) const;
lambda只是一个带有重载调用运算符的闭包类型的实例,该运算符的返回类型和参数类型是从lambda中推导出来的。此声明:
auto lambda = [](int i) { return i > 4; };
类似于以下使用匿名类型:
struct {
bool operator()(int i) const { retuirn i > 4; }
} lambda;
正如您所看到的,这个匿名类型的operator()
对于std::find_if
的要求是有效的,这就是为什么lambda可以在这里使用的原因。
相关文章:
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何在不知道C++中有多少可选参数的情况下在循环中使用va_arg?
- 我能知道我的函数有多少参数吗?
- need else 参数只出现一次,无论在循环中输入多少字符串
- 我可以通过命令行参数传递给C++程序多少数据?
- 应该向C++Lambda传递多少个参数
- C/C++ main 函数中的参数列表大小是多少,行为不确定
- 作为参数立即传递的对象生存期是多少
- 临时绑定到引用参数的默认参数的生存期是多少
- 在mbstowcs_s函数SizeInWords参数的上下文中,Word的大小是多少
- 当GetQueuedCompleteionStatus()返回FALSE时,这些参数的值是多少
- 函数参数的寿命是多少(需要引用)?
- ios:setstate实际使用了多少个参数
- 与具有字符串输出参数的 WinAPI 函数的一致性是多少
- std::bind有多少个参数(VC11只支持4个)
- transform()需要多少个参数
- 在C++中,我可以通过引用传递多少个参数,而不会出现异常行为
- 可以向main()传递多少个参数
- 如何确定需要多少参数来实现fprint格式化字符串