布尔数组的求和速度

时间:2015-02-16 09:47:34

标签: c++ arrays performance sum boolean

假设我想总结一系列布尔值:

bool arrray[LARGE_SIZE];

以下哪一个代码速度更快?

int sum=0;
for(int i=0;i<LARGE_SIZE)
   if(array[i]) sum++;

int sum=0;
for(int i=0;i<LARGE_SIZE)
   sum+=array[i] ;

还有其他方法可以加快速度吗? 这些代码用于循环,即使很小的速度差也很重要。

1 个答案:

答案 0 :(得分:4)

始终 MEASURE 。只有测量可以告诉您代码在给定上下文中的行为(给定编译器和选项,给定机器,给定负载等)。如果选择没有被编译器优化,那么没有选择的代码有更好的表现良好的机会。


如果速度真的很重要,我也会尝试std::accumulate,因为它可能只针对手头的任务进行了优化。


正如Tony D隐含地指出comment to the question,算法和数据结构的选择通常对速度的影响大于微尺度优化。例如,通过更新每个改变值的操作的计数,计数的检查可以是恒定时间。不幸的是,据我所知,std::bitset(对于编译时已知的大小数组)和boost::dynamic_bitset(对于动态大小数组)都不能保证这种行为。