2017-09-15 52 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特定的,甚至可以加快基本任务,如计数数组中的值。

除非您特别需要使用非便携式优化,否则编译器在标准库中提供的算法可能比您可能编写的东西更便于携带。

相关问题