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出现的次数