stl中的函数适配器教案
时间: 2024-04-30 11:23:07 浏览: 85
一、概述
函数适配器是一种可以改变函数行为的工具。在STL中,函数适配器通常用来将一个函数的参数或返回值类型改变为另一种类型,或者将一个函数的参数或返回值进行逻辑转换。
二、函数适配器的种类
1. bind1st和bind2nd
bind1st和bind2nd是两个函数适配器,它们用来将一个二元函数转换为一个一元函数。bind1st将第一个参数绑定为指定值,而bind2nd将第二个参数绑定为指定值。
例如,在STL中,有一个二元函数less,用于比较两个值的大小。我们可以使用bind1st将其转换为一个只比较一个值和指定值的一元函数:
```c++
#include <functional>
#include <iostream>
using namespace std;
int main()
{
int a = 5;
less<int> l;
cout << l(3, a) << endl; // true
bind1st(l, a)(3); // false
return 0;
}
```
2. not1和not2
not1和not2也是两个函数适配器,它们用来将一个一元函数或二元函数的返回值取反。
例如,在STL中,有一个一元函数not1,用于将一个bool值取反。我们可以使用not1将一个返回bool值的一元函数的返回值取反:
```c++
#include <functional>
#include <iostream>
using namespace std;
int main()
{
bool b = true;
not1<less<int> > n;
cout << n(3, 5) << endl; // false
not1<logical_and<bool> > n2;
cout << n2(true, false) << endl; // true
return 0;
}
```
3. negate
negate是一个函数适配器,它用来将一个一元函数的返回值取负。
例如,在STL中,有一个一元函数negate,用于将一个数值取负。我们可以使用negate将一个返回数值的一元函数的返回值取负:
```c++
#include <functional>
#include <iostream>
using namespace std;
int main()
{
int a = 5;
negate<int> n;
cout << n(a) << endl; // -5
return 0;
}
```
4. plus、minus、multiplies、divides、modulus
plus、minus、multiplies、divides、modulus是五个函数适配器,它们用于将两个数值进行加、减、乘、除、取余运算。
例如,在STL中,有一个二元函数plus,用于将两个数值相加。我们可以使用plus将两个返回数值的一元函数的返回值相加:
```c++
#include <functional>
#include <iostream>
using namespace std;
int main()
{
int a = 5;
plus<int> p;
cout << p(a, 3) << endl; // 8
return 0;
}
```
5. compose1
compose1是一个函数适配器,它用于将一个一元函数f和一个一元函数g组合成一个新的一元函数f(g(x))。
例如,在STL中,有一个一元函数negate,用于将一个数值取负,和一个一元函数abs,用于将一个数值取绝对值。我们可以使用compose1将这两个一元函数组合成一个新的一元函数abs(negate(x)):
```c++
#include <functional>
#include <iostream>
using namespace std;
int main()
{
int a = -5;
compose1(negate<int>(), abs<int>())(a); // 5
return 0;
}
```
6. compose2
compose2是一个函数适配器,它用于将一个二元函数f和两个一元函数g1、g2组合成一个新的二元函数f(g1(x), g2(y))。
例如,在STL中,有一个二元函数plus,用于将两个数值相加,和两个一元函数negate和abs。我们可以使用compose2将这三个函数组合成一个新的二元函数abs(negate(x)) + abs(negate(y)):
```c++
#include <functional>
#include <iostream>
using namespace std;
int main()
{
int a = -5, b = -3;
compose2(plus<int>(), compose1(negate<int>(), abs<int>()), compose1(negate<int>(), abs<int>()))(a, b); // 8
return 0;
}
```
三、小结
函数适配器是一种强大的工具,可以改变函数的行为,使得我们可以更加灵活地使用STL中的函数。在实际应用中,我们可以根据具体的需求选择合适的函数适配器来实现所需的功能。
阅读全文