这是gcc std::count_if
代码
template<typename _InputIterator, typename _Predicate>
typename iterator_traits<_InputIterator>::difference_type
count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred)
{
[snip]
typename iterator_traits<_InputIterator>::difference_type __n = 0;
for (; __first != __last; ++__first)
if (__pred(*__first))
++__n;
return __n;
}
我的问题:使用起来会更好(即更快)吗
__n += __pred(*__first); // instead of the if statement
此版本始终执行添加操作,但不执行分支操作。
最佳答案
您给提供的替换不等于,因为对谓词的限制比您想象的要少得多:
bool
),都是谓词的有效返回类型(将explicit
转换为bool
就足够了)。 给您带来替代消化不良的最有可能的返回将是标准整数类型,且值既不是0也不是1。
另外,请记住,当今编译器实际上可以进行非常好的优化(尤其是C++编译器需要进行优化,并且所有模板内容都应深层地进行)。
关于c++ - 如果没有if,std::count_if会更快吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26245969/