Question

Je ne pas utiliser la STL beaucoup et je suis désireux de commencer à apprendre, donc je fait un programme très simple en utilisant la fonction for_each de la STL. Voici l'ensemble du programme (fichiers moins d'en-tête):

class Object {
public:
    int s;

    Object() : s(0) { }

    Object(const Object& rhs) : s(rhs.s) { }

    void operator() (int a) {
        s += a;
    }
};

int main () {
    Object sum;
    int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    for_each(arr, arr + sizeof(arr) / sizeof(int), sum);

    cout << sum.s;

    cin.get();

    return 0;
}

Le 0 de du programme. Je suis certainement utilise for_each à tort, mais ce qui est faux exactement avec ce code?

Était-ce utile?

La solution

for_each fonctionne avec copier de la foncteur que vous fournissez, puis retourne une copie à la fin. Vous en avez besoin:

sum = for_each(arr, arr + sizeof(arr) / sizeof(int), sum);

Autres conseils

Si vous voulez juste pour calculer la somme, vous pouvez également utiliser std::accumulate comme:

#include <numeric>

int sum =std::accumulate(arr, arr + sizeof(arr) / sizeof(int),0);

Pas besoin de foncteur!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top