C++ Funzionale

Da Andreabont's Wiki.

In C++ esistono dei costrutti per semplificare la programmazione tramite il paradigma funzionale. Oltre ai costrutti tipicamente funzionali, la libreria standard offre una serie di algoritmi di utilità generale. Dal C++14, la funzione lambda che implementa la logica può essere sostituita dalle funzioni fornite dalla STL.

Filter

La funzione filter è fornita dalla STL tramite la chiamata std::remove_if.

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

int main () {
    std::vector<int> mioVettore = {1,2,3,4,5};
    mioVettore.erase(std::remove_if(std::begin(mioVettore), std::end(mioVettore), [](int x) {return x%2 == 0;}), std::end(mioVettore));
    for(auto i : mioVettore) {
        std::cout << i << std::endl;
    }
}

Map

La funzione map è fornita dalla STL tramite la chiamata std::transform.

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

int main () {
    std::vector<int> mioVettore = {1,2,3,4,5};
    std::transform(std::begin(mioVettore), std::end(mioVettore), std::begin(mioVettore), [](int x) {return x*2;});
    for(auto i : mioVettore) {
        std::cout << i << std::endl;
    }
}

Reduce

La funzione reduce è fornita dalla STL tramite la chiamata std::accumulate.

#include <iostream>
#include <numeric>
#include <vector>

int main () {
    std::vector<int> mioVettore = {1,2,3,4,5};
    int somma = std::accumulate(std::begin(mioVettore), std::end(mioVettore), 0, [](int x, int y) {return x+y;});
    std::cout << somma << std::endl;
}