for_each странное поведение
-
27-10-2019 - |
Вопрос
Я не использую 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);
Нет необходимости в фанкоре!
Не связан с StackOverflow