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
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