For_Enchiamo comportamento strano
-
27-10-2019 - |
Domanda
Non uso molto STL e voglio iniziare a impararlo, quindi ho realizzato un programma davvero semplice usando gli STL for_each
funzione. Ecco l'intero programma (meno file di intestazione):
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;
}
Il programma emette 0
. Sto sicuramente usando for_each
erroneamente, ma cosa c'è esattamente di sbagliato in questo codice?
Soluzione
for_each
Funziona con un copia del funtore fornito e quindi restituisce una copia alla fine. Hai bisogno di questo:
sum = for_each(arr, arr + sizeof(arr) / sizeof(int), sum);
Altri suggerimenti
Se vuoi solo calcolare la somma, allora puoi anche usare std::accumulate
come:
#include <numeric>
int sum =std::accumulate(arr, arr + sizeof(arr) / sizeof(int),0);
Non c'è bisogno di funtore!
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow