算法
只有算法是函数模板
算法可以通过问答的方式(和迭代器交互)来指代容器中的情况
迭代器是由容器提供的
迭代器分类
迭代器分类
bidirectional:双向
前面的都是容器提供的迭代器分类,只有下面两个比较特殊
迭代器分类对算法的影响
(再看看)
distance
distance就是要知道两个指针之间的距离
_advance
copy
destroy
_unique_copy
算法源码剖析:11个例子
算法accumulate
左边为两个版本的accumulate
版本1:接受头尾两个指针,和初值
版本2:接受头尾两个指针,和初值+二元操作运算
注意:binary_op(init,*first)中的这两个参数
for_each
replace
count
注意,上诉这种情况应该用容器自己的count函数
find
find_if就是在查找的时候设定一个条件
sort
rbegin(),rend()表示的就是逆向排序
注意:算法sort要求的是随机存取,上图中的list和forward_list都不可以用算法sort,只能用他们容器自带的sort
注意右上角
binary_search
lower_bound,前提已经排好序了,从最低点开始插入
upper_bound,前提已经排好序了,从最高点开始插入
仿函数
(再看看)
相对关系类就是比大小的意思
因为要把这些动作传给算法,所以才要写成仿函数的形式
C++标准库中没有的
注意上诉的注释
没有继承,就不能融入STL
一元操作
二元操作
less这边是两个操作数,所以继承二元操作
adapter
上图的push_back()就被改造为push()
binder2nd
(再看看)
less<int>()这是个对象,不是函数调用
not1
一个辅助函数+一个class(然后就开始套娃了)
bind
(从这里开始自己查资料)
注意上诉占位符的使用
右边第二个bind(my_divide,_1,2)表示的是_1处的参数不确定(这里只有一个参数了)
绑定好之后记得换名字
bind(my_divide,_2,_1),注意这里的占位符的位置颠倒
reverse_iterator
inserter
ostream_iterator
istream_iterator