STL_ count,count_if用法

  原本学STL只想看看书,编编代码,但STL内容太多,记不住,而且理解不深刻,所以换种方式,每学过一点东西都总结一下,日积月累,一定会战胜STL这块硬骨头,侯捷把STL的学习分成3个阶段,我连第一阶段还未入门,知道自己几斤几两,努力坚持。。。


STL中算法大致可分为4类

1:非可变序列算法:指不直接修改其所操作的容器内容的算法。

2:可变序列算法:   指可以修改他们操作内容的算法

3:排序算法  :        包括对序列进行排序和合并的算法.搜索算法以及有序序列上的集合操作

4:数值算法:           对容器内容进行数值计算。
count 是一种非可变序列算法,其功能是在序列中查找某个给定值出现的次数。

给一个例子:

#include "iostream"
#include <algorithm>
#include <functional>
using namespace std;
int main()
{
	int a[] = {1,2,3,1,1,1,1,2,2,2,2,3};
	int find_count = count(a,a+12,1);
	cout << "   " <<find_count<<endl;
	find_count = count_if(a,a+12,bind2nd  (not_equal_to<int>(),1));
	cout << "      "<<find_count<<endl;
	return 0;
}


count 的算法就是在一个范围内找到与 value相等值的个数,看过count 的原型(在vs2008中,不知道其他编译器中是否相同),就明白了
template<class _InIt,
	class _Ty> inline
	typename iterator_traits<_InIt>::difference_type
		count(_InIt _First, _InIt _Last, const _Ty& _Val)
	{	// count elements that match _Val
	return _Count(_CHECKED_BASE(_First), _CHECKED_BASE(_Last), _Val);
	}



这里边用到了count_if   
count_if 算法计算中的元素范围 [first, last) 导致返回 true,谓词的数量,并返回的谓词是真正的元素数。  这个不难理解
原型为:
 
 template<class InputIterator, class Predicate>  inline
       size_t count_if(InputIterator first, InputIterator last,
                              Predicate P)




前两个是迭代器,表示查找半开半闭区间的位置,第三个参数为一个用户定义的predicate function object,而predicate意思就是说是一个返回值是bool型的仿函数(function
 object,也称functor)。

STL 真的不能急,多查资料,多编代码。。。
最主要的是:不要怀疑有没有用,学了就有用,坚持不是谁都能做到的,我要做到









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值