Comme la fonction acceptée par for_each ne prennent qu'un seul paramètre (l'élément du vecteur), je dois définir un static int sum = 0
quelque part pour qu'on puisse y accéder après avoir appelé le for_each . Je pense que c'est maladroit. Y a-t-il une meilleure façon de procéder (tout en utilisant for_each) ?
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
static int sum = 0;
void add_f(int i )
{
sum += i * i;
}
void test_using_for_each()
{
int arr[] = {1,2,3,4};
vector<int> a (arr ,arr + sizeof(arr)/sizeof(arr[0]));
for_each( a.begin(),a.end(), add_f);
cout << "sum of the square of the element is " << sum << endl;
}
En Ruby, nous pouvons le faire de cette façon :
sum = 0
[1,2,3,4].each { |i| sum += i*i} #local variable can be used in the callback function
puts sum #=> 30
Pouvez-vous s'il vous plaît montrer plus d'exemples comment for_each
est typiquement utilisé dans la programmation pratique (pas seulement l'impression de chaque élément) ? Est-il possible d'utiliser for_each
simuler un "modèle de programmation" comme map et inject en Ruby (ou map /fold en Haskell).
#map in ruby
>> [1,2,3,4].map {|i| i*i}
=> [1, 4, 9, 16]
#inject in ruby
[1, 4, 9, 16].inject(0) {|aac ,i| aac +=i} #=> 30
EDIT : Merci à tous. J'ai beaucoup appris de vos réponses. Nous avons tellement de façons de faire la même chose en C++, ce qui rend l'apprentissage un peu difficile. Mais c'est intéressant :)