Uso estándar preferido: rango basado para o std :: for_each

In C ++ 11, hay dos bucles sobre todos los elementos (rango basado para y para cada uno). ¿Hay alguna razón para preferir uno sobre el otro o hay situaciones en las que uno encaja mejor?

for (auto& elem: container) {
  // do something with elem
}

std::for_each(container.begin(), container.end(),
              [](Elem& elem) {
                // do something with elem
              });

Mi idea sería que el primero es más simple y es similar a los bucles basados en rango en otros idiomas, mientras que el segundo también funciona para secuencias que no son contenedores completos y el segundo es más similar a otrosstd -algoritmos.

Respuestas a la pregunta(4)

Su respuesta a la pregunta