【问题标题】:C++ higher order functions [closed]C ++高阶函数[关闭]
【发布时间】:2014-10-14 20:33:51
【问题描述】:

我开始学习一些 C++,但不了解 C++ 中高阶函数的工作原理。有人可以在一个简单的例子中解释 c++ 11 的高阶函数吗?我在网上的任何地方都找不到关于这个主题的太多信息。

【问题讨论】:

  • “高阶”?在什么情况下,比如多项式?能举个例子吗?
  • 高阶函数只是将函数作为参数或返回函数的函数。在 C++ 中,这是任何可调用对象(std::function、函数指针、lambda、仿函数,任何实现 operator() 的对象)

标签: c++ function higher-order-functions


【解决方案1】:

<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

【讨论】:

  • 在您的示例中,您将可调用函数iseven() 定义切换为[](int i) -&gt; bool { return i % 2 == 0; },这里的[] 有什么用(c++11 标准)?
  • 它开始一个 lambda 表达式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多