(五)STL算法
、算法
1、算法通过迭代器来操作容器中的数据;
2、算法为模板函数;
二、迭代器与算法
1、根据移动能力,将迭代器分成了五类
2、使用萃取,输出各个容器中,迭代器的类别
3、其中istream, ostream的迭代器为input和output
4、算法根据迭代器的种类,去调用相应的函数。注意返回值是通过萃取来确定的difference_type
5、虽然只定义了两类,但由于继承关系,四类都可以满足。
6、拷贝(真是复杂啊,感谢候大师!),根据迭代器类型,选择合适的函数。用到了两类萃取,一类是迭代器萃取,
另一类是类型萃取:对类型提问(拷贝赋值是否重要等)
三、算法示例
1、stl中的算法,必须要有两个迭代器的指针
2、accumulate
(1)除了本身默认的累加操作为,还提供了一个自定义操作的版本;
(2)binary_op可以是函数或者仿函数。如示例,minus<int>()为仿函数,myclass重载了()操作符,myobj也是一个仿函数;
3、for_each :c++11的新用法
4、其中replace_if的pred提供一个判断操作;replace_copy则拷贝到新区间
5、count/count_if
左边为stl空间的全局函数,右边为容器的成员函数,尽量用自带的成员函数(由图可知,只有关联容器才实现了自己的count
顺序容器只能使用全局的)
6、find/find_if
7、sort
(1) 可以自定义比较操作;
(2)rbegin, rend逆序操作;
(3)8个关联容器,本身已排序,内部没有sort成员函数;
(4)不能用全局sort排序list和forward_list
(5)rbegin和rend就相当于end和begin,不过外面接了一个适配器,来改变其行为
8、binary_search之前,需要先排序。其中lower_bound返回的是可安插的最低点,upper_bound为可安插的最高点。