Оба могут использоваться для применения функции к ряду элементов.
На высоком уровне:
-
std::for_each
игнорирует возвращаемое значение функции и гарантирует порядок исполнения. -
std::transform
присваивает возвращаемое значение итератору и делает не гарантирует порядок выполнения.
Когда вы предпочитаете использовать один против другого? Есть ли какие-то тонкие оговорки?