我有一个元素向量,我可以使用一个非常昂贵的函数从每个元素中计算出一个数字。我想要映射到这些数字中最低的元素。我知道如何在 C++03 中做到这一点:*
Foo get_lowest(const std::vector<Foo> &foos) {
double lowest_so_far = std::numeric_limits<double>::max();
std::vector<Foo>::iterator best;
for(std::vector<Foo>::iterator i = foos.begin(); i != foos.end(); i++) {
const double curr_val = i->bar();
if( curr_val < lowest_so_far ) {
best = i;
lowest_so_far = curr_val
}
}
return *i;
}
我也可以使用 来做到这一点std::min_element
,除了天真的做事方式(Foo::bar
从 调用和返回布尔值<
)调用Foo::bar
次数比我上面发布的代码更多。我可以预先计算这些值中的每一个,然后使用std::min_element
,除了这段代码比上面的代码更复杂。
在 Going Native 中,有人(Sean Parent,感谢 Schepurin!)说现代 C++ 的一个好的风格指南是避免“原始循环”。有没有更 C++11 的惯用方式来做我想做的事?
* 我只是在窗口中输入了这个,我什至没有尝试编译它。