Я начал изучать C ++ и не понимаю, как работают функции более высокого порядка в C ++. Может кто-нибудь объяснить функции c ++ 11 высшего порядка на простом примере? Я не могу найти много информации по этой теме в Интернете.
Многие из стандартных функций C ++ в <algorithm>
заголовок являются примерами функций высшего порядка.
Например, count_if
Функция принимает унарный предикат, который является типом вызываемой функции, и возвращает количество объектов, соответствующих данному предикату. поскольку count_if
является функцией, которая принимает другую функцию в качестве аргумента, это делает ее функция высшего порядка.
В этом примере не используются никакие функции 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;
}