📜  C++中的高阶函数

📅  最后修改于: 2021-05-20 08:29:21             🧑  作者: Mango

高阶函数是将函数作为参数的函数。它用在C++中不使用的函数式语言中,尽管由于C++ 11给了我们lambdas和’std :: 函数’…且人们常常没有意识到’std :: 函数’是不是一个可以填补所有用例的工具。在本文中,我们将说明如何将函数作为参数传递给另一个调用函数。

句法:

参数:在上面的function_name中,有一个名为fun_name的函数作为参数。 function_namefun_name都可以具有一些其他参数。

下面是相同的插图:

C++14
// C++ program to illustrate the higher
// order function in C++
#include 
using namespace std;
  
// Function that will be passed as an
// arguments to calling fuction
bool Parser(string x)
{
    // Check if string start
    // with alphabt 'R'
    return x[0] == 'R';
}
  
// Fuction that takes function as
// an arguments
vector Parse(vector a,
                     function Parser)
{
    vector ans;
  
    // Traverse the vector a
    for (auto str : a) {
        if (Parser(str)) {
            ans.push_back(str);
        }
    }
  
    // Return the resultant vector
    return ans;
}
  
// Driver Code
int main()
{
    vector dict = { "geeks", "Rxop",
                            "Rka", "for" };
  
    // Function Call for Higher
    // Order Functions
    vector ans = Parse(dict, Parser);
  
    // Print the results
    for (auto str : ans) {
        cout << str << " ";
    }
  
    return 0;
}


输出:
Rxop Rka

高阶函数的优点

通过使用高阶函数,可以解决许多问题。对于实施例,建立一个函数,它的列表和其他函数作为其输入应用于的函数到该列表中的每个元素,并返回新的列表。在Haskell中,可以使用内置的称为map的高阶函数轻松地完成此操作。该图的定义是:

map :: (a -> b) -> [a] -> [b]  
map _ [ ] = [ ]  
map f (x : xs) = f x : map f xs

这里,

  • 第一行是函数初始化。
  • 元素符号代表“属于类型”。
  • [a]表示相似元素的列表,在last- >之后编写的实体始终是函数的返回类型。Haskell中的函数始终仅返回一个实体。
  • (a-> b)定义了一个从’a’到’b’的函数。我们使用递归来定义地图,
    []表示一个空列表, _表示“任何”。
  • 第二行描述了如果输入了空列表和任何函数,则输出将为空列表。
  • x:xs用于从列表中一个接一个地取出元素,x是第一个元素(头),xs是剩余的列表(尾巴)。 符号代表串联。简而言之,第三行是从列表中获取每个元素,并对它们应用函数“ f” ,并将其与其余列表连接在一起。
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”