Programowanie funkcyjne w C++

Opublikowane: 29/11/2014

w kategorii Zasoby.

Programowanie fukcyjne to traktowanie funkcji jako atrybutów które mogą być przesyłane jako argumenty i wykonywane wewnątrz wywoływanej funkcji. Z pomocą programowania generycznego może to prowadzić do wysoce zoptymalizowanego oprogramowania.

Przykład:

int numbers[] = {5,7,13,122};
const int size = sizeof(numbers)/sizeof(numbers[0]);
int sum;

// liczy sumę liczb integer w tablicy (styl C)
sum = 0;
for(int i=0; i < size; ++i)
  sum += numbers[i]; 
cout << "Suma (C): " << sum << "\n";

// liczy sumę liczb integer w tablicy (styl STL)  
sum = std::accumulate(numbers, numbers+size, 0);
cout << "Sum (STL): " << sum << "\n";

// liczy sumę liczb integer w tablicy (styl fukcjonalny STL)
// std::plus może być zastąpiony przez std::minus lub własną funkcję / funktor (klasę z operatorem "()")
sum = std::accumulate(numbers, numbers+size, 0, std::plus<int>());
cout << "Suma (STL plus): " << sum << "\n";

// liczy sumę liczb integer w tablicy (styl C++11)  
sum = 0;
for (int n: numbers) 
  sum += n;
cout << "Suma (C++11): " << sum << "\n";

// liczy sumę liczb integer w tablicy (funkcjonalnie - lambdy w C++11)
sum = 0;
std::for_each(std::begin(numbers), std::end(numbers), [&sum] (int n) {sum += n;});
cout << "Suma (funkcjonalne C++11, lambda i for_each): " << sum << "\n";

Zasoby

Blogi

Zobacz również

  • C++11 - więcej na temat wyrażeń lambda w C++11

Udostępnij

obserwuj