(五)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为可安插的最高点。

 

posted @ 2018-12-29 16:17  牧马人夏峥  阅读(168)  评论(0编辑  收藏  举报