STL_ count,count_if用法

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


STL中算法大致可分为4类

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

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

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

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

给一个例子:

#include "iostream"
#include 
#include 
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 << "   " <(),1));
	cout << "      "<

 
   count 的算法就是在一个范围内找到与 value相等值的个数,看过count 的原型(在vs2008中,不知道其他编译器中是否相同),就明白了 
  
template 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  inline
       size_t count_if(InputIterator first, InputIterator last,
                              Predicate P)



 
   前两个是迭代器,表示查找半开半闭区间的位置,第三个参数为一个用户定义的predicate function object,而predicate意思就是说是一个返回值是bool型的仿函数(function object,也称functor)。 
   
 
  
可以参考,http://www.cnblogs.com/dyingfire/archive/2009/01/22/1380062.html
STL 真的不能急,多查资料,多编代码。。。
最主要的是:不要怀疑有没有用,学了就有用,坚持不是谁都能做到的,我要做到

 
   



 
  


你可能感兴趣的:(STL)