C++学习-函数-count与count_if

count和count_if的用法总结

1 algorithm下的count

algorithm头文件下的count用于元素的计数,使用对象包括vector,list,set,数组,等等。如:

count(begin,end,k);//格式
int arr[100];
count(arr,arr+i,元素K)

返回值是arr中元素k出现的次数,而二维数组内部其实也是线性的,所以可以用取地址符&获得要查找的返回。

vector<int> vec={...};
count(vec.begin(),vec.end(),元素K);

返回值是vec中元素k出现的次数,对于list,set同理,第一个参数和第二个参数填入要查找的范围(注意是迭代器,所以对queue,stack而言并不支持),第三个参数填入要查找的元素。
至于map,由于个人没有找到合适的填入第三个参数的方法,编译器每次都报错,所以,,,(逃)

2 algorithm头文件下的count_if

algorithm下的count_if用于查找满足条件的元素的出现次数,对象包括数组,vector,list,map,等等。
格式如下:

count_if(begin,end,cmp);

其中cmp函数应是一个返回值类型为bool的函数,需要我们自己书写,以此确定我们需要元素的返回条件 p 。如:

bool cmp(int x)
{
    if(x满足条件p) return 1;
    else return 0;
}

如果我们需要统计list里奇数出现的次数

bool cmp(int x)
{
    return x%2;
}

int main()
{
    list<int> lis;
    ...
    cout<<count_if(lis.begin(),lis.end(),cmp);//输出奇数出现的次数
    ...
    return 0;
}

对于其他容器同理,同时注意cmp函数里的形参的数据类型应与 容器/数组 里元素的数据类型一致。
值得注意的是map可以用于count_if,不过写cmp函数的时候要注意形参的类型应该是pair。

bool cmp(pair<int,int> x);//能不能是其他类型个人不清楚
{
    if(x.first满足条件p) return 1;
    else return 0;
}

3 关联容器自带的count函数

关联容器map和set自带count函数,由于去重性,返回值只能是1或0,可以借此判断该元素是否存在。

map<int,string> a;
a.count(k)  //返回键值k出现的次数(注意是键值),结果为0或1
set<int> b;
b.count(k)  //返回元素k出现的次数
posted @ 2020-12-06 11:41  七铭的魔法师  阅读(793)  评论(0编辑  收藏  举报