Почему for_each не может изменить аргумент функтора?
http://www.cplusplus.com/reference/algorithm/for_each/
Унарная функция, принимающая элемент диапазона в качестве аргумента. Это может быть указатель на функцию или объект, класс которого перегружает operator (). Его возвращаемое значение, если оно есть, игнорируется.
Согласно этой статье, я ожидал, что for_each фактически изменяет объект, заданный в качестве третьего аргумента, но кажется, что for_each работает с временным объектом и даже не изменяет данный ему объект.
Итак, почему это реализовано таким образом? Это кажется гораздо менее полезным. Или я что-то неправильно понял, и мой код ниже содержит ошибки?
#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;
}
Ожидаемый результат:
1 2 3 Result: 6
Но получил следующий вывод:
1 2 3 Result: 1