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?

È stato utile?

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
scroll top