Translate

miércoles, 19 de marzo de 2025

Funciones Lambda en C++


Las funciones lambda en C++ permiten definir funciones anónimas de manera concisa y flexible. Introducidas en C++11 y mejoradas en versiones posteriores, las lambdas son muy útiles para expresiones cortas y para capturar variables del contexto circundante.

La sintaxis general de una lambda es:


[captura](parámetros) -> tipo_de_retorno { cuerpo };


Veamos un ejemplo:


#include <iostream>


int main() {

    auto suma = [](int a, int b) -> int {

        return a + b;

    };

    

    std::cout << "La suma es: " << suma(3, 4) << std::endl;

    return 0;

}


Las lambdas pueden capturar variables del contexto donde se definen. Su puede captura por Valor


#include <iostream>


int main() {

    int x = 10;

    auto lambda = [x]() { std::cout << "x = " << x << std::endl; };

    lambda();

    return 0;

}


Como x se captura por valor, cualquier cambio dentro de la lambda no afectará la variable original.

Y captura por Referencia:


#include <iostream>


int main() {

    int x = 10;

    auto lambda = [&x]() { x += 5; };

    lambda();

    std::cout << "x después de la lambda: " << x << std::endl;

    return 0;

}


Dado que x se captura por referencia, su modificación dentro de la lambda afecta la variable original.

Se puede capturar todo el entorno automáticamente:


- [=] captura todas las variables por valor.

- [&] captura todas las variables por referencia.


#include <iostream>


int main() {

    int a = 5, b = 10;

    auto lambda = [=]() { std::cout << "a + b = " << (a + b) << std::endl; };

    lambda();

    return 0;

}


Las lambdas pueden almacenarse en std::function para mayor flexibilidad:


#include <iostream>

#include <functional>


int main() {

    std::function<int(int, int)> multiplicar = [](int x, int y) { return x * y; };

    std::cout << "Multiplicación: " << multiplicar(3, 4) << std::endl;

    return 0;

}


Las lambdas son útiles para definir comparaciones personalizadas:


Por ejemplo: 


#include <iostream>

#include <vector>

#include <algorithm>


int main() {

    std::vector<int> nums = {3, 1, 4, 1, 5, 9};

    

    std::sort(nums.begin(), nums.end(), [](int a, int b) {

        return a > b;

    });

    

    for (int n : nums) std::cout << n << " ";

    return 0;

}


Las funciones lambda en C++ permiten definir funciones anónimas de manera flexible y eficiente. Son especialmente útiles en programación funcional, expresiones cortas y manejo de algoritmos en la STL.