STL源码(5):仿函数、适配器

一、仿函数:
重载了()的struct或class

STL里面的仿函数都是继承下面两个结构体,只有继承了才能使用适配器
STL源码(5):仿函数、适配器
**二、适配器:**将一种接口转成另外一种接口
容器adapter: stack、queue

迭代器适配器:
**reverse_iterator:**使得迭代器的从尾部到头部来遍历容器,output_iterator
将reverse_iterator与一个正向迭代器绑定,通过调用正向迭代器的方法来实现逆向迭代器。
STL源码(5):仿函数、适配器
STL源码(5):仿函数、适配器
insert_iterator: output_iterator
每一个insert_iterator对应一个容器和迭代器,每次对这个容器进行复制操作,通过insert_iterator转化成插入操作。

**重载了“=”符号,因为*insert_iterator返回的也是一个insert_iterator,在进行赋值的时候(result=first),会调用这个重载函数。
STL源码(5):仿函数、适配器
stream_iterator:
将迭代器绑定到一个数据流上

istream_iterator:input_iterator
STL源码(5):仿函数、适配器
STL源码(5):仿函数、适配器
每读一个数据,istream_iterator++,直到eof为止
STL源码(5):仿函数、适配器

ostream_iterator:output_iterator
绑定了一个ostream流和分隔符,重载了“=”操作符,每次调用=则会调用ostream输出
STL源码(5):仿函数、适配器
函数适配器:
binder2nd和binder1st:
STL源码(5):仿函数、适配器
STL源码(5):仿函数、适配器
bind2nd会调用binder2nd的构造函数,生成一个匿名对象(函数对象),将绑定的第二个参数的数值12记录在binder2nd对象的value里面。
STL源码(5):仿函数、适配器
该对象传给count_if,count_if会调用bind2nd重载的(),在()函数中调用了less(x,12);
STL源码(5):仿函数、适配器