operator()

在c++中,operator()是用于重载函数调用运算符的语法,通过它定义的函数也被叫做函数调用运算符重载函数。使用该运算符重载的类或结构体的对象可像函数一样被调用,这样的对象被称为 “函数对象”(也叫 “仿函数”)。主要作用如下:

<1>自定义排序规则

#include <iostream>
#include <algorithm>
#include <vector>

// 自定义比较函数对象,用于降序排序
struct Greater {
    bool operator()(int a, int b) {
        return a > b;
    }
};

int main() {
    std::vector<int> numbers = {3, 1, 4, 1, 5, 9};
    // 使用 Greater 函数对象进行降序排序
    std::sort(numbers.begin(), numbers.end(), Greater());
    for (int num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;
    return 0;
}

<2>封装可调用行为

#include <iostream>

// 定义一个计数器函数对象
struct Counter {
    int count = 0;
    // 重载函数调用运算符
    void operator()() {
        count++;
        std::cout << "调用次数: " << count << std::endl;
    }
};

int main() {
    Counter counter;
    counter(); // 第一次调用
    counter(); // 第二次调用
    return 0;
}

<3>适配算法和数据结构

#include <iostream>
#include <queue>
#include <vector>

// 自定义比较函数对象,实现小顶堆
struct Compare {
    bool operator()(int a, int b) {
        return a > b;
    }
};

int main() {
    std::priority_queue<int, std::vector<int>, Compare> pq;
    pq.push(3);
    pq.push(1);
    pq.push(2);
    std::cout << "队首元素: " << pq.top() << std::endl;
    return 0;
}

<4>作为回调函数

#include <iostream>

// 定义一个函数对象
struct Print {
    void operator()(int num) {
        std::cout << "打印数字: " << num << std::endl;
    }
};

// 接受回调函数的函数
void process(int num, Print callback) {
    callback(num);
}

int main() {
    int number = 42;
    Print printer;
    process(number, printer);
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值