for loop vs std ::for _каждый с лямбдой [дубликат]

На этот вопрос уже есть ответ здесь:

Давайте рассмотрим шаблонную функцию, написанную на 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противоречат общепринятому мнению. Что мне здесь не хватает?

36
задан Andrey 14 August 2012 в 16:30
поделиться