for_each comportement bizarre
-
27-10-2019 - |
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?
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