Można nimi zastąpić np. wolny std::bind chcąc zbindować argumenty, albo lepiej – coś na co nie kojarzę pojedynczego słowa ale jest bardzo przydatne i w kodzie poniżej:
/*Wolny, ale szybki do napisania algorytm na n–tą liczbę
z ciągu fibbonacciego, nie chciało mi się pisać porządnej,
nierekurencyjnej wersji. */
size_t calculate_fib(size_t n) {
if(n < 2) {
return 1;
}
return calculate_fib(n - 1) + calculate_fib(n - 2);
}
int main() {
std::vector<size_t> fib;
fib.resize(10);
size_t n;
std::cin >> n;
/* Bardzo elastyczny i wydajny sposób wypełnienia tej tablicy */
std::generate(fib.begin(), fib.end(), [&n] { return calculate_fib(++n); });
for(auto i: fib) {
std::cout << i << std::endl;
}
return 0;
}
Dodatkowo lambdy jako obiekty pewnych struktur (nie zastanawiaj się jakich, stracisz czas) mają dużo ciekawych właściwości, po ich typach można dziedziczyć, używać jako wizytorów (bez boost-a), generyczne lambdy są w dodatku często świetnym odpowiednikiem szablonu funkcji (którego nie można od tak przekazać jako parametru do np. std::accumulate).