STL学习笔记(5)- STL的函数适配器bind1st和bind2nd


  • bind1st 是将一个二元函数的第一个参数绑定为固定值的函数(实质上是仿函数类)
  • bind2nd 是将一个二元函数的第二个参数绑定为固定值的函数(实质上是仿函数类)

他们再使用的时候都需要加上头文件<functional>

 

1. bind1st

下面是一个关于 bind1st 的简单示例:

这里我们先定义了一个仿函数 MLess 用来进行两个数的比较,使用函数 bind1stMLess<int>()(const T& a, const T& b) 的第一个参数绑定为5,然后传入后续的参数与5进行比较,很显然 5 < 6 的结果为 true
程序的运行结果为:
1

首先我们的自定义函数继承自类 binary_function , 关于类 binary_function 的定义很简单,源码如下:

这是一个二元函数的模板类,定义两个输入参数,一个返回值。

关于 bind1st 的实现也非常简单,源码如下:

从代码中,可以轻松看出, bind1st 是一个函数模板,需要传入两个参数,_Func_Leftbinder1st 是一个仿函数类,构造函数中将 _Func 赋值给了成员 op_Left 赋值给我成员 value,重载的 () 正好调用的函数 op(value, _Right)

我们上面的例子中,

实际上是返回一个仿函数类 binder1st ,成员 opMLess\<int>() 对象, value5

而调用

时,实际上是在调用函数

也就是这么调用

 

2. bind2nd

bind2nd 的内部实现跟 bind1st 类似,这里就不缀余了。下面是一个 bind2nd 的简单实用示例,将列表 nList 中的 >30 的数打印出来:

程序的运行结果为:
40
50
60

You May Also Like

About the Author: admin

喜欢编程、爱游戏,更爱生活。

发表评论

电子邮件地址不会被公开。