【C/C++】STL中count函数和count_if函数

【C/C++】STL中count函数和count_if函数

  count和count_if函数都是计数函数,那他们有什么区别呢?

文章目录

  • 【C/C++】STL中count函数和count_if函数
    • 一、count函数
    • 二、count_if 函数
    • 三、总结


一、count函数

  count函数的功能:统计容器中等于value元素的个数。

  count函数的参数

count(first,last,value); //first是容器的首迭代器,last是容器的末迭代器,value是询问的元素。

给出n个数字(n<=1000),再给出一个数字m,请问:数字m在n个数字中出现的次数。

  看到这道题,首先会想到使用sort+equal_range函数的配合(n的范围大约在1万—10万左右),不过n<=1000 数据量不大,所以我们可以直接使用count函数,这里我们要注意一点:count函数的复杂度是线性的,最坏情况是O(n)。

#include 
#include 
#include 
#include 
using namespace std;
int main()
{
    int n;
    vector <int> V;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        int temp;
        cin>>temp;
        V.push_back(temp);
    }
    int ask;
    while(cin>>ask)
    {
        int num=count(V.begin(),V.end(),ask);
        cout<<num<<endl;
    }
    return 0;
}

二、count_if 函数

假如我们要使用STL的函数 统计1-10奇数的个数,怎么办呢?

  这里就需要使用count_if函数了。

  count_if函数的功能 :统计区间中满足指定条件的元素数目。

  count_if函数的参数

count_if(first,last,value,comp);
//first为首迭代器,last为末迭代器,value为要查询的元素,comp为比较函数。

  我们来看一下count_if函数STL的源代码:

template <class InputIterator, class Predicate>
 ptrdiff_t count_if ( InputIterator first, InputIterator last, Predicate pred ) 
{
	 ptrdiff_t ret=0; 
	 while (first != last) 
	 if (pred(*first++)) ++ret;
	 return ret;
}

  count_if(first,last,value,comp),其实comp比较函数才是整个count_if函数的核心,comp比较函数是程序员自己写的,返回值是一个布尔型。那么对于上面的提问:统计1-10奇数的个数(迎刃而解)

#include 
#include 
#include 
#include 
using namespace std;
bool comp(int num)
{
    return num%2;
}
int main()
{
    vector <int> V;
    for(int i=1;i<=10;i++)
        V.push_back(i);
    cout<<count_if(V.begin(),V.end(),comp)<<endl;
    return 0;
}

三、总结

count count_if
count(first,last,value); count_if(first,last,value,comp);
在序列中统计某个值出现的次数 在序列中统计与某谓词匹配的次数

你可能感兴趣的:(C/C++,STL,count,count_if,C++)