странное поведение for_each - PullRequest
1 голос
/ 30 апреля 2011

Я не очень часто использую STL, и я хочу начать изучать его, поэтому я сделал действительно простую программу с использованием функции for_each STL.Вот вся программа (без заголовочных файлов):

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;
}

Программа выводит 0.Я определенно неправильно использую for_each, но что именно не так с этим кодом?

Ответы [ 2 ]

4 голосов
/ 30 апреля 2011

for_each работает с копией предоставленного вами функтора, а затем возвращает копию в конце. Вам нужно это:

sum = for_each(arr, arr + sizeof(arr) / sizeof(int), sum);
3 голосов
/ 30 апреля 2011

Если вы просто хотите вычислить сумму, вы также можете использовать std::accumulate как:

#include <numeric>

int sum =std::accumulate(arr, arr + sizeof(arr) / sizeof(int),0);

Функтор не нужен!

...