我有一個元素向量,我可以使用非常昂貴的函數從每個元素計算單個數字。我想要映射到這些數字中最小的元素。我知道如何做到這一點在C++ 03:*C++中的高效Argmin 11
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
,但該代碼比上面的代碼更復雜。
在融入本土,有人(肖恩父母,感謝SChepurin!)說,一個良好的風格指南現代C++是爲了避免「原始循環」。有沒有更多的C++ 11習慣做我想做的事情?
*我剛纔輸入到窗口此,我甚至沒有嘗試編譯它。
通常情況下,「原始數組」與[''](http://en.cppreference.com/w/cpp/header/algorithm)函數相反。 –
Drop
@Drop對不起,我不明白。那麼原始數組呢? – anjruu
我不確定您通過「調用Foo :: bar」的次數超過我發佈的代碼的意思......「。您的代碼基本上實現了與http://www.cplusplus.com/reference/algorithm/min_element/ –