用std :: for_each改变对象是否可以?

qwe*_*rty 7 c++ stl

for_each接受InputIterators:

//from c++ standard
template <class InputIterator, class Function>
   Function for_each (InputIterator first, InputIterator last, Function f);
Run Code Online (Sandbox Code Playgroud)

是否可以更改Function f中的对象,如下所示:

struct AddOne
{
    void operator()(int & x){x = x + 1;}
};

std::vector<int> vec(10);
std::for_each(vec.begin(),vec.end(),AddOne());
Run Code Online (Sandbox Code Playgroud)

此代码适用于VC++ 2008以及GCC,但它是否也是可移植(合法)代码?
(InputIterators仅保证可用作rvalue,在这种情况下,它们在AddOne的operator()中用作左值)

dir*_*tly 7

阅读这篇文章.

要迂腐:for_each是一种非修改序列操作.目的不是修改序列.然而,这好当使用修改输入序列for_each.