让我们考虑一个用 C++11 编写的模板函数,它迭代一个容器。请排除范围循环语法,因为我正在使用的编译器尚不支持它。
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
});
}
std::for_each
for循环与以下方面的优缺点是什么:
一场表演?(我不希望有任何区别)
b) 可读性和可维护性?
在这里我看到了很多缺点for_each
。它不会接受 c 风格的数组,而循环会。lambda 形式参数的声明非常冗长,无法在auto
此处使用。是不可能突破的for_each
。
在 C++11 之前的日子里,反对for
的论点是需要指定迭代器的类型(不再成立),并且很容易错误地输入循环条件(我在 10 年内从未犯过这样的错误)。
作为结论,我的想法for_each
与普遍观点相矛盾。我在这里想念什么?