http://www.cplusplus.com/reference/algorithm/for_each/
Función unaria tomando un elemento en el rango como argumento. Esto puede ser un puntero a una función o un objeto cuya clase sobrecarga el operador (). Se ignora su valor de retorno, si lo hay, .¿Por qué no se puede modificar su parámetro functor por cada vez?
De acuerdo con este artículo, esperaba que for_each modifica realmente el objeto dado como su tercer argumento, pero parece que for_each opera en un objeto temporal, y ni siquiera modificar el objeto dado a ella.
Entonces, ¿por qué se implementa de esa manera? Parece mucho menos útil. ¿O no entendí bien algo y mi código a continuación contiene errores?
#include <iostream>
#include <vector>
#include <algorithm>
template <class T> struct Multiplicator{
T mresult;
public:
const T& result() const{return mresult;}
Multiplicator(T init_result = 1){
mresult = init_result;
}
void operator()(T element){
mresult *= element;
std::cout << element << " "; // debug print
}
};
int main()
{
std::vector<double> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
Multiplicator<double> multiply;
std::for_each(vec.begin(),vec.end(),multiply);
std::cout << "\nResult: " << multiply.result() << std::endl;
return 0;
}
Resultados previstos:
1 2 3 Result: 6
pero no obtuvo resultado siguiente:
1 2 3 Result: 1
¿Qué le parece cambiar el título de su pregunta? Podría facilitar que otros lo encuentren. – BeeBand