声明具有 int 类型的 lambda 不起作用
Declaring lambda with int type not working
我想以某种方式使用 lambda 函数,但它不起作用,我也不知道为什么。
vector<int> v;
/* ... */
int median = [](vector<int> a)
{
sort(a.begin(), a.end());
return a[a.size() / 2];
}
我创建了一个 lambda 函数,但我该如何调用它?
int median = [](vector<int> a) { ... } (v)
?但是也不行。
我只在一些示例中看到过 lambda 函数,例如制作自定义比较器。我能否以某种方式使其适用于我的情况?
'median' 是一个函数,但您可以像这样声明 return 类型。
#include<functional>
vector<int> v;
/* ... */
std::function<int(vector<int>)> median = [](vector<int> a)->int
{
sort(a.begin(), a.end());
return a[a.size() / 2];
};
Can I make it work in my case somehow?
是的,你可以。您可以将其命名为 immediately after the definition:
int median = [](std::vector<int> a) {
std::sort(a.begin(), a.end());
return a[a.size() / 2];
}(v);
//^^ --> invoke immediately with argument
参考:
或定义 lambda 并稍后调用它。
/* const */ auto median = [](std::vector<int> a) { ...}
int res = median(v);
请注意,我使用了 auto
类型来指定 lambda 函数的类型。这是因为,lambda 有所谓的 闭包类型 ,我们只能通过 auto
或任何 类型的擦除机制 来提及它比如std::function
.
The lambda expression is a prvalue expression of unique unnamed non-union non-aggregate class type, known as closure type, which is declared (for the purposes of ADL) in the smallest block scope, class scope, or namespace scope that contains the lambda expression.
我想以某种方式使用 lambda 函数,但它不起作用,我也不知道为什么。
vector<int> v;
/* ... */
int median = [](vector<int> a)
{
sort(a.begin(), a.end());
return a[a.size() / 2];
}
我创建了一个 lambda 函数,但我该如何调用它?
int median = [](vector<int> a) { ... } (v)
?但是也不行。
我只在一些示例中看到过 lambda 函数,例如制作自定义比较器。我能否以某种方式使其适用于我的情况?
'median' 是一个函数,但您可以像这样声明 return 类型。
#include<functional>
vector<int> v;
/* ... */
std::function<int(vector<int>)> median = [](vector<int> a)->int
{
sort(a.begin(), a.end());
return a[a.size() / 2];
};
Can I make it work in my case somehow?
是的,你可以。您可以将其命名为 immediately after the definition:
int median = [](std::vector<int> a) {
std::sort(a.begin(), a.end());
return a[a.size() / 2];
}(v);
//^^ --> invoke immediately with argument
参考:
或定义 lambda 并稍后调用它。
/* const */ auto median = [](std::vector<int> a) { ...}
int res = median(v);
请注意,我使用了 auto
类型来指定 lambda 函数的类型。这是因为,lambda 有所谓的 闭包类型 ,我们只能通过 auto
或任何 类型的擦除机制 来提及它比如std::function
.
The lambda expression is a prvalue expression of unique unnamed non-union non-aggregate class type, known as closure type, which is declared (for the purposes of ADL) in the smallest block scope, class scope, or namespace scope that contains the lambda expression.