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?

War es hilfreich?

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