11 votes

somme des carrés de chaque élément du vecteur en utilisant for_each

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 :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X