​算法​

C++ STL(三)_迭代器

​只有算法是函数模板​

​算法可以通过问答的方式(和迭代器交互)来指代容器中的情况​

迭代器是由容器提供的

​迭代器分类​

C++ STL(三)_两个指针_02

迭代器分类
bidirectional:双向

C++ STL(三)_ide_03

C++ STL(三)_两个指针_04

​前面的都是容器提供的迭代器分类,只有下面两个比较特殊​

C++ STL(三)_占位符_05

C++ STL(三)_c++_06

​迭代器分类对算法的影响​​(再看看)

​distance​

​distance就是要知道两个指针之间的距离​

C++ STL(三)_ide_07

​_advance​

C++ STL(三)_迭代器_08

​copy​

C++ STL(三)_c++_09

​destroy​

C++ STL(三)_两个指针_10

C++ STL(三)_迭代器_11

​_unique_copy​

C++ STL(三)_两个指针_12

C++ STL(三)_两个指针_13

C++ STL(三)_两个指针_14

​算法源码剖析:11个例子​

​算法accumulate​

C++ STL(三)_两个指针_15

左边为两个版本的accumulate
版本1:接受头尾两个指针,和初值
版本2:接受头尾两个指针,和初值+二元操作运算

注意:binary_op(init,*first)中的这两个参数

​for_each​

C++ STL(三)_c++_16

​replace​

C++ STL(三)_占位符_17

​count​

C++ STL(三)_两个指针_18

​注意,上诉这种情况应该用容器自己的count函数​

​find​

C++ STL(三)_两个指针_19

​find_if就是在查找的时候设定一个条件​

​sort​

C++ STL(三)_占位符_20

​rbegin(),rend()表示的就是逆向排序​

​注意:算法sort要求的是随机存取,上图中的list和forward_list都不可以用算法sort,只能用他们容器自带的sort​

C++ STL(三)_两个指针_21

注意右上角

​binary_search​

C++ STL(三)_迭代器_22

​lower_bound,前提已经排好序了,从最低点开始插入​

​upper_bound,前提已经排好序了,从最高点开始插入​

​仿函数​​(再看看)

C++ STL(三)_占位符_23

​相对关系类就是比大小的意思​

​因为要把这些动作传给算法,所以才要写成仿函数的形式​

C++ STL(三)_ide_24

C++标准库中没有的

C++ STL(三)_c++_25

​注意上诉的注释​

​没有继承,就不能融入STL​

C++ STL(三)_ide_26

一元操作
二元操作
less这边是两个操作数,所以继承二元操作

​adapter​

C++ STL(三)_两个指针_27

C++ STL(三)_ide_28

上图的push_back()就被改造为push()

​binder2nd​​(再看看)

C++ STL(三)_ide_29

less<int>()这是个对象,不是函数调用

​not1​

C++ STL(三)_c++_30

一个辅助函数+一个class(然后就开始套娃了)

​bind​​(从这里开始自己查资料)

C++ STL(三)_两个指针_31

C++ STL(三)_占位符_32

​注意上诉占位符的使用​

右边第二个bind(my_divide,_1,2)表示的是_1处的参数不确定(这里只有一个参数了)
绑定好之后记得换名字

bind(my_divide,_2,_1),注意这里的占位符的位置颠倒

​reverse_iterator​

C++ STL(三)_c++_33

​inserter​

C++ STL(三)_迭代器_34

​ostream_iterator​

C++ STL(三)_ide_35

​istream_iterator​

C++ STL(三)_迭代器_36

C++ STL(三)_占位符_37