преобразование (test.begin (), test.end (), test.begin (),
(-1 + = Var (а), ++ Var (а)));
Это будет переводить на
int doit(int & elem) {
elem += a;
return ++a;
}
for each elem : elem = doit(elem);
Начиная с = 0 приведет к 1 при первом запуске. Мы увеличиваем 10 раз, так что мы получим 10 в последнем запуске.
for_each (test.begin (), test.end (), (_ 1 + = Var (а), ++ Var (а)));
Это переведет на
void doit(int & elem) {
elem += a;
++a;
}
for each elem : doit(elem);
Начиная с = 0, мы получим 0 при первом запуске. Мы увеличиваем в 10 раз, но присваиваем его непосредственно перед увеличением. Таким образом, последнее число - 9.
Надеюсь, теперь с переводом к обычным функциям понятно, что эти двое делают.