C++STL学习笔记 仿函数以及适配器

一、仿函数

(1)算数类(Arithmetic)

(2)逻辑运算类(Logicial)

(3)相对关系类(Relational)

C++STL学习笔记 仿函数以及适配器_第1张图片

C++STL学习笔记 仿函数以及适配器_第2张图片

C++STL学习笔记 仿函数以及适配器_第3张图片

1、仿函数的可适配条件

STL规定每个Adaptable Function都应该挑选适当者继承之,因为Function Adapter将会提问红色问题。例如:

C++STL学习笔记 仿函数以及适配器_第4张图片

Less继承Binary_function,于是Less便有了三个typedef,分别是

typedef int first_argument_type;

typedef int second_argument_type;

typedef bool result_type;

2、各种适配器举例

(1)函数适配器binder2nd

C++STL学习笔记 仿函数以及适配器_第5张图片

(2)函数适配器not1

C++STL学习笔记 仿函数以及适配器_第6张图片

(3)新型适配器find(Since C++11)

std::bind可以绑定:

a、functions

b、function objects

c、member functions,_1必须是某个object的地址

d、data members,_1必须是某个object的地址

返回一个function object ret。调用ret相当于调用上述a,b,c,或者相当于取出d。

C++STL学习笔记 仿函数以及适配器_第7张图片

二、迭代器适配器

1、迭代器适配器:reverse_iterator

C++STL学习笔记 仿函数以及适配器_第8张图片

reverse_iterator的关键所在,即对逆向迭代器取值,就是将对应的正向迭代器退一位取值。

C++STL学习笔记 仿函数以及适配器_第9张图片

2、迭代器适配器:inserter

C++STL学习笔记 仿函数以及适配器_第10张图片

我自己编译没有通过,查出来是Copy第三个参数,OutputIterator这个参数,不知道是否动态识别出其类型。即h36::Inserter(foo,it)的返回值的类型是否为InputIterator。

3、X适配器:ostream_iterator

C++STL学习笔记 仿函数以及适配器_第11张图片

4、X适配器:istream_iterator

C++STL学习笔记 仿函数以及适配器_第12张图片

测试用例2编译没有通过,问题点在copy函数部分。

有懂得的朋友可以帮忙看看。

你可能感兴趣的:(C++,STL,仿函数,适配器)