Pas forcément, c'est juste qu'écrire une fonction lambda est plus adapté lorsque la fonction est simple et ne ressert pas
Version sans fonction lambda:
#include <vector>
#include <algorithm>
#include <iostream>
struct Sum
{
void operator()(int n) { sum += n; }
int sum{0};
};
void print(const int& n)
{
std::cout << " " << n;
}
int ajout(int &n)
{
return n++;
}
int main()
{
std::vector<int> nums{3, 4, 2, 8, 15, 267};
std::cout << "before:";
std::for_each(nums.cbegin(), nums.cend(), print);
std::cout << '\n';
std::for_each(nums.begin(), nums.end(), ajout);
// calls Sum::operator() for each number
Sum s = std::for_each(nums.begin(), nums.end(), Sum());
std::cout << "after: ";
std::for_each(nums.cbegin(), nums.cend(), print);
std::cout << '\n';
std::cout << "sum: " << s.sum << '\n';
}
Par contre je comprends pas la différence entre cbegin() et begin() (une histoire d'itérateur avec ou sans qualificatif const)