На этот вопрос уже есть ответ здесь:
Давайте рассмотрим шаблонную функцию, написанную на C++11, которая перебирает контейнер. Пожалуйста, исключите из рассмотрения синтаксис цикла диапазона, потому что он еще не поддерживается компилятором, с которым я работаю.
template
void DoSomething(const Container& i_container)
{
// Option #1
for (auto it = std::begin(i_container); it != std::end(i_container); ++it)
{
// do something with *it
}
// Option #2
std::for_each(std::begin(i_container), std::end(i_container),
[] (typename Container::const_reference element)
{
// do something with element
});
}
Каковы плюсы и минусы цикла for по сравнению с std::for_each
с точки зрения:
производительность )? (Разницы не ожидаю)
b )удобочитаемость и ремонтопригодность?
Здесь я вижу много недостатков for_each
. Он не примет массив стиля c -, в то время как цикл примет. Объявление формального параметра лямбда настолько подробное,там нельзя использовать auto
. Вырваться из for_each
невозможно.
До -С++ за 11 дней аргументами против for
были необходимость указания типа итератора (больше не поддерживается )и легкая возможность опечатки условия цикла (I никогда не совершал такой ошибки за 10 лет ).
В заключение, мои мысли о for_each
противоречат общепринятому мнению. Что мне здесь не хватает?