Programación C++ – Funciones anónimas Lambdas

Una lambda es una función anónima que puedes definir in situ, sin la necesidad de crear una función separada. Las lambdas son especialmente útiles cuando necesitas pasar una función como argumento a otra función, como std::for_each, std::transform, std::sort, entre otros.

Ejemplo 1: Uso de Lambdas en Algoritmos de la STL:

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> numeros = {5, 2, 8, 1, 9, 3};

    // Ordenar el vector utilizando una lambda
    std::sort(numeros.begin(), numeros.end(), [](int a, int b) {
        return a < b;
    });

    // Imprimir los números ordenados
    for (int num : numeros) {
        std::cout << num << " ";
    }

    return 0;
}

Aquí, [](int a, int b) { return a < b; } es la lambda que define una función anónima que toma dos enteros a y b como argumentos y devuelve un valor booleano basado en la comparación. Esta función se utiliza como criterio de orden en el algoritmo std::sort.

std::sort(numeros.begin(), numeros.end(), [](int a, int b) {
    return a < b;
});

Ejemplo 2: Uso de Lambdas en Transformaciones:

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> numeros = {1, 2, 3, 4, 5};

    // Duplicar cada número utilizando una lambda
    std::transform(numeros.begin(), numeros.end(), numeros.begin(), [](int num) {
        return num * 2;
    });

    // Imprimir los números duplicados
    for (int num : numeros) {
        std::cout << num << " ";
    }

    return 0;
}

En este caso, [](int num) { return num * 2; } es la lambda que define una función anónima que toma un entero num como argumento y devuelve el resultado de multiplicar num por 2. Esta función se utiliza para transformar cada elemento en el vector numeros.

std::transform(numeros.begin(), numeros.end(), numeros.begin(), [](int num) {
    return num * 2;
});

Ejemplo 3: Uso de Lambdas en Funciones de Orden Superior:

#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>

// Función que aplica una función a cada elemento de un vector
void aplicarFuncion(std::vector<int>& datos, std::function<int(int)> funcion) {
    for (int& num : datos) {
        num = funcion(num);
    }
}

int main() {
    std::vector<int> numeros = {1, 2, 3, 4, 5};

    // Utilizar una lambda para elevar al cuadrado
    aplicarFuncion(numeros, [](int num) {
        return num * num;
    });

    // Imprimir los números al cuadrado
    for (int num : numeros) {
        std::cout << num << " ";
    }

    return 0;
}

En este ejemplo, [](int num) { return num * num; } es la lambda que define una función anónima que toma un entero num como argumento y devuelve el resultado de elevar num al cuadrado. Esta función se pasa como argumento a la función aplicarFuncion.

aplicarFuncion(numeros, [](int num) {
    return num * num;
});

Pueder ir al artículo principal:

Códigos Sencillos hechos en C++

Deja un comentario