函数表(function与函数可调用对象,函数数组指针)

function<ElementType1 (ElementType2,ElementType3)>:表示接受一个ElementType2参数,一个  ElementType3参数,返回ElementTYpe1类型的可调用对象。

/**
    function<ElementType1 (ElementType2,ElementType3)>:表示接受一个ElementType2参数,一个
    ElementType3参数,返回ElementTYpe1类型的可调用对象。
*/

#include <iostream>
#include <functional>
#include <map>
using namespace std;
int add(int a,int b)
{
    return a+b;
}
struct divide
{
    int operator()(int m,int n)
    {
        return m/n;
    }
};
int main()
{
    map<string,function<int(int,int)> > binops;
    auto mod=[](int m,int n){return m%n;};
    binops.insert(make_pair("+",add));
    binops.insert(pair<string,function<int(int,int)> >("-",minus<int>()));
    binops.insert(make_pair("*",[](int i,int j){return i*j;}));
    binops.insert({"/",divide()});
    binops.insert({"%",mod});
    printf("input you want calculate num and operate:\n");
    int m,n;
    string s;
    cin >> m >> s >> n;
    cout << binops[s](m,n) << endl;
    cout << "\n调试:\n";
    cout << binops["+"](3,5) <<endl;
    cout << binops["-"](3,5) << endl;
    cout << binops["*"](3,5) << endl;
    cout << binops["/"](3,5) << endl;
    cout << binops["%"](3,5) << endl;
    return 0;
}

函数数组指针:

自己写的函数,lambda表达式都可以作为地址传递给函数数组指针,但是标准库中的functional
    头文件下的 minus 等函数不能传递,定义的类,也不能传递。
    并且函数数组指针还是以下标(下标从0开始)进行访问,并不方便,还是用map容器更加好一点

/**
    自己写的函数,lambda表达式都可以作为地址传递给函数数组指针,但是标准库中的functional
    头文件下的 minus 等函数不能传递,定义的类,也不能传递。
    并且函数数组指针还是以下标(下标从0开始)进行访问,并不方便,还是用map容器更加好一点
*/



#include <iostream>
#include <functional>
#include <map>
using namespace std;
int add(int a,int b)
{
    return a+b;
}

int sub(int a,int b)
{
    return a-b;
}

//int mult(int a,int b)
//{
//    return a*b;
//}

int divide(int a,int b)
{
    return a/b;
}

//int mod(int a,int b)
//{
//    return a%b;
//}

//struct divide
//{
//    int operator()(int m,int n)
//    {
//        return m/n;
//    }
//};
int main()
{

    auto mult=[](int i,int j){return i*j;};
    auto mod=[](int m,int n){return m%n;};
    int (*binops[]) (int n ,int m)={add,sub,mult,divide,mod};
//    binops.insert(make_pair("+",add));
//    binops.insert(pair<string,function<int(int,int)> >("-",minus<int>()));
//    binops.insert(make_pair("*",[](int i,int j){return i*j;}));
//    binops.insert({"/",divide()});
//    binops.insert({"%",mod});
    printf("input you want calculate num and operate:\n");
    int m,n;
    int s;
    cin >> m >> s >> n;
    cout << binops[s](m,n) << endl;

    cout << "\n调试:\n";
    cout << binops[0](3,5) <<endl;
    cout << binops[1](3,5) << endl;
    cout << binops[2](3,5) << endl;
    cout << binops[3](3,5) << endl;
    cout << binops[4](3,5) << endl;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值