c – 将std :: count_if更快没有一个if?
这是
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)是谓词的有效返回类型(对bool的显式转换就足够了).
最有可能的退回给您的替代消化不良将是一个标准的整型类型,值不为0和1. 另外,请记住,编译器实际上可以优化当今的优势(特别是C需要,所有这些模板的东西分层深). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ruby-on-rails – 如何使用Devise:可记忆?
- PostgreSQL:PostgreSQL数据库中最多可存储多少表?
- xcode – iOS配置get-task-allow AND:配置文件无效:0xe80
- vue.js项目nginx部署教程
- 正则表达式递归写法
- c – 二叉搜索树(BST)
- LeetCode 10 - Regular Expression Matching
- postgresql – 插入初始数据后Postgres抱怨id’已存在’?
- [Swift]LeetCode521. 最长特殊序列 Ⅰ | Longest Uncommon
- Blob列SQlite Adob??e AIR中的第一个字节是什么? Blob Siz