para_ cada comportamiento extraño
-
27-10-2019 - |
Pregunta
No uso mucho el STL y quiero comenzar a aprenderlo, así que hice un programa realmente simple usando el STL's for_each
función. Aquí está todo el programa (menos archivos de encabezado):
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;
}
El programa sale 0
. Definitivamente estoy usando for_each
Injendemente, pero ¿qué es exactamente lo que está mal con este código?
Solución
for_each
funciona con un Copiar del functor que proporciona, y luego devuelve una copia al final. Necesitas esto:
sum = for_each(arr, arr + sizeof(arr) / sizeof(int), sum);
Otros consejos
Si solo desea calcular la suma, también puede usar std::accumulate
como:
#include <numeric>
int sum =std::accumulate(arr, arr + sizeof(arr) / sizeof(int),0);
¡No hay necesidad de functor!
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow