チラ裏のメモ
簡単に覚えよう、高階関数とは、引数や戻り値に関数を渡せる関数の事。
(関数の単語が三回出てきててめんどくさい。)
//引数に関数オブジェクトを渡す場合。
void func(std::function<void()> f)
{
f();
}
//戻り値が関数オブジェクトだ。
std::function<void()> func2()
{
return [](){printf("わん\n");};
}
int main()
{
func([](){printf("にゃおーん\n");});
std::function<void()> ff = func2();
ff();
//これ楽しい
func( func2() );
return 0;
}
関数ポインタとか渡そうと思ったら書き方を忘れている・・・(汗
とりあえずこっちで。
((追記:ちなみに、C言語では第1級関数のサポートが無いので関数ポインタを使った所で高階関数ということにはならないらしい。こういう厳密な定義ってめんどくさいね。だけど、大事なことは大体めんどくさいんだってさ...。))
で、上記のような意味のない関数では、なかなか腑に落ちないので以下。
int main()
{
int arr[] = {1,3,4,5,6,7};
//これは高階関数になってる
std::sort(std::begin(arr)
, std::end(arr)
, [](int a, int b){return a > b; });
// ログで確認
for(const auto &n : arr)
{
std::cout << n << std::endl;
}
return 0;
}