有人能解释一下 [](int i){ return i % 2 == 0; } 是什么意思吗?

3
在STL算法std::all_of的以下示例代码中,'[](int i){ return i % 2 == 0; }'是什么意思?
int main() { 

    std::vector<int> v{10, 2, 4, 6}; 

    if (std::all_of(v.begin(), v.end(), [](int i){ return i % 2 == 0; })) { 
        std::cout << "All numbers are even\n"; 
    } 
    else{
        std::cout << "All numbers are not even\n"; 
    }
}
1个回答

2
这是一个检查i是否为偶数的lambda函数。如果i是偶数,它将返回true,否则返回false。
它的逻辑等同于:
#include <algorithm>
#include <iostream>

bool isEven(int i) {
  return i % 2 == 0;
}

int main() { 

    std::vector<int> v{10, 2, 4, 6}; 

    if (std::all_of(v.begin(), v.end(), isEven)) { 
        std::cout << "All numbers are even\n"; 
    } 
    else{
        std::cout << "All numbers are not even\n"; 
    }
}

输出:

所有数字都是偶数


注意:这个 lambda 方法是一个自由函数,它不会捕获任何东西。
附注:这个 lambda 方法与 STL 没有任何关系。

2
好像我还需要学习这些lambda函数,谢谢。 - Lorenzo
@Lorenzo,λ方法可能会派上用场,抽象地将其视为匿名方法,尝试一下并享受乐趣吧...顺便欢迎来到Stack Overflow! :) - gsamaras

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接