2017-09-15 22 views
-6

我讀了哪個實現更適合執行某些向量項的計數的問題。哪個C++實現是更可取的,基於範圍的循環或count_if

這是優於

auto countif = [] (T t) { return t.countable(); }; 
const int count = std::count_if(v.begin(), v.end(), countif); 
return count ; 

int count = 0; 
for ( auto& t : v) 
    if (t.countable()) count++; 

的問題已經否決了,因此被刪除。

+0

如果你只會使用好的名字。你爲什麼要命名lambda countif?它是可數的,is_countable或do_count或類似的東西。 – 2017-09-15 09:16:28

+0

姓名來自OP,不是來自我的。爲了讓他認識他的問題,我保留了他們。 – schorsch312

+1

那不是使用錯誤名稱的有效理由。你在這裏是OP。 – user463035818

回答

1

你應該幾乎總是使用算法std::count_if(如果可用)。

原因是編譯器供應商可以將優化放在不可移植的位置,如果您要將它們手動放入自己的循環中。例如,有固有的函數可能是CPU特定的,甚至可以加快基本任務,如計數數組中的值。

除非您特別需要使用非便攜式優化,否則編譯器在標準庫中提供的算法可能比您可能編寫的東西更便於攜帶。