Uso padrão preferido: intervalo baseado em ou std :: for_each

Dentro C ++ 11, existem dois loops em todos os elementos (com base em for e for_each). Existe algum motivo para preferir um ao outro ou há situações em que um se encaixa melhor?

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

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

Minha idéia seria que o primeiro seja mais simples e semelhante a loops com base em intervalo em outros idiomas, enquanto o segundo também funciona para sequências que não são contêineres completos e o segundo é mais semelhante a outrostd -algorithms.

questionAnswers(4)

yourAnswerToTheQuestion