我开始学习一些C ++,并且不了解高阶函数在C ++中是如何工作的。有人可以在一个简单的例子中解释更高阶的c ++ 11函数吗?我无法在网上找到有关此主题的更多信息。
答案 0 :(得分:5)
<algorithm>
标题中的许多标准C ++函数都是高阶函数的示例。
例如,count_if
函数采用一元谓词,该谓词是一种可调用函数,并返回与给定谓词匹配的对象计数。由于count_if
是一个将另一个函数作为参数的函数,因此它为higher-order function。
此示例并未使用任何C ++ 11功能,但C ++ 11仅增加了以前C ++标准中对高阶函数的现有支持:
#include <algorithm>
#include <iostream>
#include <vector>
bool is_even(int i) {
return i % 2 == 0;
}
int main(int argc, char *argv[]) {
std::vector<int> v;
for (int i = 0; i < 10; ++i) {
v.push_back(i);
}
std::cout
<< "count = "
<< std::count_if(v.begin(), v.end(), &is_even)
<< std::endl;
return 0;
}
将此转换为使用某些C ++ 11功能的示例非常简单:
#include <algorithm>
#include <iostream>
#include <vector>
int main(int argc, char *argv[]) {
std::vector<int> v = { 0, 1, 2, 3, 4, 5 };
std::cout
<< "count = "
<< std::count_if(v.begin(),
v.end(),
[](int i) -> bool { return i % 2 == 0; })
<< std::endl;
return 0;
}
在第二个示例中,我将向量初始化更改为使用list initialization,并且已将is_even
替换为lambda expression。