Вопрос

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

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 Неправильно, но что именно не так с этим кодом?

Это было полезно?

Решение

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

sum = for_each(arr, arr + sizeof(arr) / sizeof(int), sum);

Другие советы

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

#include <numeric>

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

Нет необходимости в фанкоре!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top