for loop vs std::for_each with lambda

Posted by Andrey on Stack Overflow See other posts from Stack Overflow or by Andrey
Published on 2012-08-14T16:05:52Z Indexed on 2013/11/11 15:54 UTC
Read the original article Hit count: 115

Filed under:
|
|

Let's consider a template function written in C++11 which iterates over a container. Please exclude from consideration the range loop syntax because it is not yet supported by the compiler I'm working with.

template <typename Container>
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
    });
  }

What are pros/cons of for loop vs std::for_each in terms of:

a) performance? (I don't expect any difference)

b) readability and maintainability?

Here I see many disadvantages of for_each. It wouldn't accept a c-style array while the loop would. The declaration of the lambda formal parameter is so verbose, not possible to use auto there. It is not possible to break out of for_each.

In pre- C++11 days arguments against for were a need of specifying the type for the iterator (doesn't hold any more) and an easy possibility of mistyping the loop condition (I've never done such mistake in 10 years).

As a conclusion, my thoughts about for_each contradict the common opinion. What am I missing here?

© Stack Overflow or respective owner

Related posts about c++

Related posts about lambda