迭代数组以调用每个元素的特定方法。
(a)中。索引样式
for(std::size_t i = 0; i < my_objs.size(); i++)
{
my_objs[i].do_something();
}
(b)中。迭代器风格
for(std::vector<MyObject>::const_iterator iter = my_objs.begin();
iter != my_objs.end(); iter++)
{
iter->do_something();
}
(c)中。 STL风格
std::for_each(my_objs.begin(), my_objs.end(), [](const MyObject& obj){ obj.do_something(); });
(d)。 C ++ 11 for-loop风格
for(const auto& obj: my_objs)
{
obj.do_something();
}
许多C ++书告诉我,尽可能使用STL。但是比较(c)到(d),STL样式for-loop需要额外的iterator pair
和lambda的parameter type definition
,以便std::for_each
变得太长而无法轻松阅读。看起来(d)方式更清晰,类型更少。
哪一个具有更好的可读性?或者任何更好的样式来表示调用向量中每个对象的成员函数?
答案 0 :(得分:1)
如果您有一个非常简单的任务,例如调用一个无效的成员函数,那么算法样式可能是合适的:
std::for_each(my_objs.cbegin(), my_objs.cend(),
std::mem_fn(&MyObject::do_something));
否则可以随意使用基于范围的循环,这对于小型工作单元是完全可以接受的。当你发现任何一个街区做了太多工作时,一如既往地使用你的判断和重构。