transform — modifies and stores result. for_each — modifies in place.
std::transform:
1std::vector<int> v = {1, 2, 3};2std::vector<int> result(v.size());34// Square each element5std::transform(v.begin(), v.end(), result.begin(),6 [](int x) { return x * x; }7);8// result: 1, 4, 9910// In-place11std::transform(v.begin(), v.end(), v.begin(),12 [](int x) { return x * 2; }13);
std::for_each:
1std::for_each(v.begin(), v.end(),2 [](int& x) { x *= 2; }3);
Key difference: