如何在C++ STL中使用Binder和Bind2nd函数对象
在C ++中,函数对象(也称为函数类)是可以像函数一样使用的对象。它们可以被称为函数,但它们还可以具有内部状态,可以像任何其他对象一样传递。当您希望将函数作为参数传递给另一个函数,但是您希望该函数具有一些其他上下文或状态时,这可能非常有用。
在C ++中创建函数对象的一种方法是定义一个类,该类重载了函数调用运算符(operator())。
例如:
这个函数对象类 Add 在其构造函数中使用整数作为参数,并将其存储为内部状态。它重载了函数调用运算符,因此当使用整数参数调用 Add 对象时,它返回其内部状态和参数的总和。
以下是如何使用此函数对象的示例:
在此示例中,我们创建了一个内部状态为5的 Add 对象,然后使用参数3调用它。 调用 adder(3) 等价于调用 adder.operator()(3),它返回5和3的和,即8。
binder是C++标准模板库(STL)中的函数模板,允许您创建将特定参数绑定到二元函数的函数对象。 Bind2nd的函数模板是binder的一种特定实例,将二元函数的第二个参数绑定到特定值。
以下是如何使用 bind2nd 创建一个将其参数乘以10的函数对象的示例:
在此示例中,我们使用 bind2nd 创建一个将其参数乘以10的函数对象。 然后,我们使用参数5调用此函数对象,它返回5*10的结果,即50。
示例1: 使用函数对象类添加两个数字
输出:
示例2: 使用 bind2nd 创建一个将其参数乘以10的函数对象
输出
示例3: 使用bind函数创建一个函子,将一个固定值从其参数中减去。
输出
时间复杂度: O(1)。
辅助空间: O(1)。