Предпочтительное стандартное использование: диапазон на основе или std :: for_each

ВC ++ 11, есть два цикла по всем элементам (диапазон основан на и for_each). Есть ли какая-либо причина, чтобы отдавать предпочтение одному другому, или есть ситуации, когда один лучше подходит?

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

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

Моя идея заключается в том, что первый проще и похож на циклы на основе диапазона в других языках, в то время как второй также работает для последовательностей, которые не являются полными контейнерами, а второй больше похож на другиеstd-алгорифмов.

Ответы на вопрос(2)

Ваш ответ на вопрос