Мое предложение было бы, все это имеет значение, как вы передаете свой элемент в функцию, то есть по ссылке или по указателю и изменить его или как копию и изменить его.
Но, как уже говорили другие, если вы хотите изменить значения, лучше использовать transform, так как он заботится о возвращаемых значениях.
class MultiplyBy {
private:
int factor;
public:
MultiplyBy(int x) : factor(x) {
}
int operator () (int other) const {
other = factor + other;
return other;
}
// int operator () (int & other) const {
// other = factor + other;
// return other;
// }
};
vector<int> x1= {1, 2, 3, 4, 5};
vector<int> x2;
std::transform(x1.begin(), x1.end(), back_inserter(x2), MultiplyBy(3));
std::for_each(x1.begin(), x1.end(), MultiplyBy(3));