Funciones de orden superior en C++

Las funciones de orden superior son funciones que toman funciones como argumento. Se usa en lenguajes funcionales que no se usan en C++ , aunque esto está cambiando lentamente desde que C++ 11 nos dio lambdas y ‘std::function’… y con frecuencia las personas no se dan cuenta de que ‘std::function’ es no es una herramienta que llena todos los casos de uso. En este artículo, explicaremos cómo pasar una función como argumento a una función de llamada diferente.

Sintaxis:

tipo_retorno nombre_función(función<tipo_retorno nombre_función(lista_argumentos), otros argumentos de función)

Parámetros: En la función anterior , nombre_función toma una función llamada nombre_diversión como argumento. Tanto function_name como fun_name pueden tener algunos argumentos adicionales.

A continuación se muestra la ilustración del mismo:

C++14

// C++ program to illustrate the higher
// order function in C++
#include <bits/stdc++.h>
using namespace std;
 
// Function that will be passed as an
// arguments to calling function
bool Parser(string x)
{
    // Check if string start
    // with alphabet 'R'
    return x[0] == 'R';
}
 
// Function that takes function as
// an arguments
vector<string> Parse(vector<string> a,
                     function<bool(string)> Parser)
{
    vector<string> 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<string> dict = { "geeks", "Rxop",
                            "Rka", "for" };
 
    // Function Call for Higher
    // Order Functions
    vector<string> ans = Parse(dict, Parser);
 
    // Print the results
    for (auto str : ans) {
        cout << str << " ";
    }
 
    return 0;
}
Producción: 

Rxop Rka

 

Ventajas de las funciones de orden superior :

Mediante el uso de la función de orden superior, se pueden resolver muchos problemas. Por ejemplo, para construir una función que toma una lista y otra función como su entrada, aplica esa función a cada elemento de esa lista y devuelve la nueva lista. En Haskell, esto podría hacerse muy fácilmente utilizando la función de orden superior incorporada llamada mapa. La definición del mapa es:

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

Aquí,

  • La primera línea es la inicialización de la función.
  • El símbolo de los elementos significa «es del tipo».
  • [a] representa una lista de elementos similares, la entidad ha escrito después del último -> siempre es el tipo de devolución de la función. Una función en Haskell siempre devuelve solo una entidad.
  • (a->b) define una función de ‘a’ a ‘b’. Usamos la recurrencia para definir el mapa, 
    [] denota una lista vacía y _ denota «cualquier cosa».
  • La segunda línea muestra que si se ingresa la lista vacía y cualquier función, la salida será una lista vacía.
  • x: xs se usa para sacar elementos uno por uno de la lista, x es el primer elemento (cabeza) y xs es la lista restante (cola). : signo significa concatenación. Entonces, en pocas palabras, la tercera línea toma cada elemento de la lista y les aplica la función ‘f’ , y los concatena con la lista restante.

Publicación traducida automáticamente

Artículo escrito por Karad_1818 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *