【STL】count_if

简介:

功能

返回满足条件的元素个数

模版

template <class InputIterator, class Predicate>
  typename iterator_traits<InputIterator>::difference_type  //返回值
    count_if (InputIterator first, InputIterator last, UnaryPredicate pred); 

实现

复制代码
template <class InputIterator, class UnaryPredicate>
  typename iterator_traits<InputIterator>::difference_type
    count_if (InputIterator first, InputIterator last, UnaryPredicate pred)
{
  typename iterator_traits<InputIterator>::difference_type ret = 0;
  while (first!=last) 
 {
    if (pred(*first))
         ++ret;
    ++first;
  }
  return ret;
}
复制代码

参数

  1. first, last: 输入迭代器指出首尾的位置,范围是[first, last),即包括第一个而不包括last。
  2. pred: 一元函数名字,接收范围内的一个元素作为参数,返回bool值。函数不得修改其参数。可以为函数指针或函数对象。

案例

案例1. pred为bool函数

代码

复制代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool IsOdd(int i)
{
    return ((i % 2) == 1);
}
int main()
{
    vector<int> vec;
    for(int i=0; i<10; ++i)
        vec.push_back(i);
    int mycount = count_if(vec.begin(), vec.end(), IsOdd);
    cout << "My vector contains " << mycount << " odd values." << endl;
}
复制代码

输出

 

案例2. pred为函数对象

代码

复制代码
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
class GT_cls
{
    public:
        GT_cls(int val) : bound(val) {}
        bool operator()(const string &s)
        { return s.size() >= bound; }
    private:
        string::size_type bound;
};
int main()
{
    vector<string> vec;
    vec.push_back("hello1");
    vec.push_back("hello12");
    vec.push_back("hello123");
    vec.push_back("hello1234");
    vec.push_back("hello12345");
    GT_cls tmp(7);  //函数对象比函数更灵活
    cout << count_if(vec.begin(), vec.end(), tmp) << endl;
}
复制代码

输出

4

复杂度

O(1)

参考

http://www.cplusplus.com/reference/algorithm/count_if/





本文转自jihite博客园博客,原文链接:http://www.cnblogs.com/kaituorensheng/p/3505927.html,如需转载请自行联系原作者

相关文章
|
安全 关系型数据库 MySQL
MySQL里面的innodb_support_xa
在看innodb_support_xa之前我们要先看下什么是XA,什么是两阶段提交。 XA 一个协调分布式事务的标准接口,为了遵从ACID原则,允许多个DB参与事务。为了查看更多,请 Section 13.3.7, “XA Transactions”。
5922 0
|
Linux 网络安全 数据安全/隐私保护
ssh设置免密登录后登录仍需密码可能的原因,以及 ssh 出问题或的调试方法
ssh设置免密登录后登录仍需密码可能的原因,以及 ssh 出问题或的调试方法
ssh设置免密登录后登录仍需密码可能的原因,以及 ssh 出问题或的调试方法
|
NoSQL 关系型数据库 测试技术
[20160229]探究oracle的启动过程.txt
[20160229]探究oracle的启动过程.txt --昨天自己研究了sys.bootstrap$,链接http://blog.itpub.net/267265/viewspace-2016219/ --今天换一种方式探究,当加载某个对象时,会调用内部函数kqlobjlod,通过gdb设置断点,可以实现了解启动的过程。
764 0
|
6天前
|
人工智能 运维 安全
|
3天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
5天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
499 14
|
11天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
868 109
|
4天前
|
人工智能 测试技术 API
智能体(AI Agent)搭建全攻略:从概念到实践的终极指南
在人工智能浪潮中,智能体(AI Agent)正成为变革性技术。它们具备自主决策、环境感知、任务执行等能力,广泛应用于日常任务与商业流程。本文详解智能体概念、架构及七步搭建指南,助你打造专属智能体,迎接智能自动化新时代。