原本学STL只想看看书,编编代码,但STL内容太多,记不住,而且理解不深刻,所以换种方式,每学过一点东西都总结一下,日积月累,一定会战胜STL这块硬骨头,侯捷把STL的学习分成3个阶段,我连第一阶段还未入门,知道自己几斤几两,努力坚持。。。
原本学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 真的不能急,多查资料,多编代码。。。
最主要的是:不要怀疑有没有用,学了就有用,坚持不是谁都能做到的,我要做到