For_each seltsames Verhalten
-
27-10-2019 - |
Frage
Ich benutze das STL nicht viel und möchte es lernen, also habe ich ein wirklich einfaches Programm mit den STLs gemacht for_each
Funktion. Hier ist das gesamte Programm (minus Header -Dateien):
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;
}
Das Programm gibt aus 0
. Ich benutze definitiv for_each
Falsch, aber was genau ist mit diesem Code los?
Lösung
for_each
funktioniert mit a Kopieren des von Ihnen bereitgestellten Funkers und gibt am Ende eine Kopie zurück. Du brauchst das:
sum = for_each(arr, arr + sizeof(arr) / sizeof(int), sum);
Andere Tipps
Wenn Sie nur die Summe berechnen möchten, können Sie auch verwenden std::accumulate
wie:
#include <numeric>
int sum =std::accumulate(arr, arr + sizeof(arr) / sizeof(int),0);
Keine Notwendigkeit des Functors!
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow