2017-09-15 20 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++; 

よりも優れている質問は否決されたため、削除されました。 1が利用可能な場合

+0

良い名前のみを使用する場合は、なぜあなたはラムダカウントの名前をつけていますか?それはcountable、is_countable、do_countなどです。 –

+0

名前はOPから来た、私から来ていない。私は彼が彼の質問を認識するために彼らを守った。 – schorsch312

+1

不正な名前を使用する正当な理由ではありません。あなたはここにOPです。 – user463035818

答えて

1

あなたはほとんど常にstd::count_ifようアルゴリズムを使用する必要があります。

理由は、コンパイラのベンダが、あなた自身のループで手動でそれらを配置する場合、移植性がない最適化を置くことができるからです。例えば、本来のの機能は、CPUであり、配列内の値をカウントするような基本的な処理を高速化することができます。

移植性のない最適化を特に必要としている場合を除き、アルゴリズムは標準ライブラリでコンパイラによって提供され、移植性の高い方法で作成する可能性があります。

関連する問題