火龙信奥
  • 首页
  • 课程
  • 题库
  • 打卡
    • 代码对战
    • 快速对战
  • 题单
  • 团队
  • 荣誉墙
  • 商城
  • 登录 / 注册

函数对象 (Funktionsobjekte) / 仿函数 (Funktoren)

作者: 作者的头像   huolong , 时间:2025-09-22 10:39:15 , 所有人可见, 阅读  8

函数对象 (Funktionsobjekte) / 仿函数 (Funktoren)

功能上等同于函数,但具有对象的所有特性。 是重载了 () 运算符的类。 比普通函数更灵活:可以拥有属性(成员变量)、支持继承、支持虚函数。 在许多 STL 算法中被广泛使用。 示例:

class PlusFunktor{
    int p; // 成员变量
public:
    PlusFunktor(int x): p(x) {}; // 构造函数,初始化 p
    int operator() (int x) {     // 重载 () 运算符
        return x + p;            // 将成员变量 p 加到参数 x 上
    }
};

重载了 () 运算符:将属性 p 加到参数 x 上。

PlusFunktor plus2(2); // 创建一个对象,p = 2
int i = 10;
i = plus2(i);         // 调用对象的 operator(),相当于 i = plus2.operator()(i); 结果 i = 12

示例

class PlusFunktor{
    int p;
public:
    PlusFunktor(int x): p(x) {};
    int operator() (int x) {return x + p;}
};
int main() {
    PlusFunktor plus2(2); // 创建一个函数对象,p = 2
    int constexpr n = 6;
    int feld[] = {1, 2, 3, 4, 5, 6}; // 数组初始化为 {1,2,3,4,5,6}

    for (int i: feld) cout << i << " "; 
    cout << endl; // 输出: 1 2 3 4 5 6

    transform(feld, feld+n, feld, plus2);
    // 使用 plus2 对象对数组每个元素进行变换
    // 结果: feld = {3, 4, 5, 6, 7, 8}

    transform(feld, feld+n, feld, PlusFunktor(3));
    // 创建一个新的临时函数对象 PlusFunktor(3) (p=3),并对数组每个元素进行变换
    // 结果: feld = {6, 7, 8, 9, 10, 11}
}

说明: transform 函数将一元操作(unary operation)应用于数组的每个元素。

第一次 transform: 使用已创建的函数对象 plus2(其 p=2),将数组每个元素加2。 第二次 transform: 直接传入一个临时的函数对象 PlusFunktor(3),它会立即被构造(p=3),并将数组每个元素加3。

—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com

©2026加盟我们 | 关于我们 | ACM课程 | 常见问题 | 成果墙 | 评测记录 | 浙ICP备2021013995号
在线画图 | OI WIki | 打字练习
火龙信奥
请输入登录信息


请完成安全验证
验证码底图 滑块
向右拖动滑块完成验证
请输入用户名 / 绑定的手机号码



请输入注册信息(手机号验证码注册)





验证码5分钟有效,60秒内不可重复获取,每日最多3次

微信登录

微信登录二维码

正在生成二维码...

账号已过期,请续期。
去续期

绑定手机号

📱

为了更好地保护您的账号安全,享受完整的平台服务

请您尽快绑定手机号码