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?

¿Fue útil?

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