如何在C++ STL中使用Binder和Bind2nd函数对象

如何在C++ STL中使用Binder和Bind2nd函数对象

在C ++中,函数对象(也称为函数类)是可以像函数一样使用的对象。它们可以被称为函数,但它们还可以具有内部状态,可以像任何其他对象一样传递。当您希望将函数作为参数传递给另一个函数,但是您希望该函数具有一些其他上下文或状态时,这可能非常有用。

在C ++中创建函数对象的一种方法是定义一个类,该类重载了函数调用运算符(operator())。

例如:

class Add {
public:
     Add(int x) : x_(x) {}
     int operator()(int y) { return x_ + y; }

private:
     int x_;
};
C++

这个函数对象类 Add 在其构造函数中使用整数作为参数,并将其存储为内部状态。它重载了函数调用运算符,因此当使用整数参数调用 Add 对象时,它返回其内部状态和参数的总和。

以下是如何使用此函数对象的示例:

Add adder(5);
//现在 z 为 8
int z = adder(3); 
C++

在此示例中,我们创建了一个内部状态为5的 Add 对象,然后使用参数3调用它。 调用 adder(3) 等价于调用 adder.operator()(3),它返回5和3的和,即8。

binder是C++标准模板库(STL)中的函数模板,允许您创建将特定参数绑定到二元函数的函数对象。 Bind2nd的函数模板是binder的一种特定实例,将二元函数的第二个参数绑定到特定值。

以下是如何使用 bind2nd 创建一个将其参数乘以10的函数对象的示例:

#include <functional>
//返回值为50
std::bind2nd(std::multiplies<int>(), 10)(5) 
C++

在此示例中,我们使用 bind2nd 创建一个将其参数乘以10的函数对象。 然后,我们使用参数5调用此函数对象,它返回5*10的结果,即50。

示例1: 使用函数对象类添加两个数字

// C++程序示例,演示使用函数对象类添加两个数字。
#include <iostream>
 
// 创建Add类
class Add {
public:
    //构造函数使用一个整数值作为functor的内部状态
    Add(int x)
        : x_(x)
    {
    }
 
    // 重载函数调用运算符,将其内部状态添加到参数。
    int operator()(int y) { return x_ + y; }
 
private:
    int x_;
};
 
// 主函数
int main()
{
    // 创建一个内部状态为5的Add函数对象
    Add adder(5);
 
    // 使用3作为参数调用函数对象,返回5和3的和
    int z = adder(3);
    std::cout << "z: " << z << std::endl;
    return 0;
}  
C++

输出:

z: 8
C++

示例2: 使用 bind2nd 创建一个将其参数乘以10的函数对象

// C++程序示例,演示使用bind2nd创建将其参数乘以10的函数对象。
#include <functional>
#include <iostream>
 
// 主函数
int main()
{
    // 使用bind2nd创建将其参数乘以10的函数对象
    auto multiplier
        = std::bind2nd(std::multiplies<int>(), 10);
 
    // 使用参数5调用函数对象,返回5*10的结果
    int x = multiplier(5);
    std::cout << "x: " << x << std::endl;
 
    return 0;
}  
C++

输出

x: 50
C++

示例3: 使用bind函数创建一个函子,将一个固定值从其参数中减去。

// 演示如何使用bind函数创建函子,
// 将一个固定值从其参数中减去。
#include <functional>
#include <iostream>
 
// 主函数
int main()
{
    // 利用bind函数创建一个实例,
    // 减去的固定值为5。
    std::binder1st<std::minus<int> > subtraction(
        std::minus<int>(), 5);
 
    // 调用函子,将10作为参数,
    // 返回5-10的结果。
    int y = subtraction(10);
    std::cout << "y: " << y << std::endl;
 
    return 0;
}  
C++

输出

y: -5
C++

时间复杂度: O(1)。

辅助空间: O(1)。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册