C/C++自定义简易Map映射,Reduce聚敛函数,初识函数套用

C/C++自定义简易Map映射,Reduce聚敛函数,初识函数简单套用

程序应用目标

最近初学C/C++语言,对应指针的应用与指针函数的应用,以及声明 typedef 新类型达到一种或用函数调用。

程序要求

自定义一个map函数,要求能够传入自定义操作函数:执行 加 或者 减 操作
自定义个一个reduce函数,要求能够数组中的各个数子按要求进行聚合成一个内容,这里为表达简便只写了一个累加函数:addall(int *arr,int n)

程序例子

    #include <stdio.h>
    #include <malloc.h>
    
    typedef int (*opt)(int,int);//自定义函数指针类型
    typedef int (*opt2)(int *, int);
    
    
    int *map(opt opt1,int *arr,int n,int *temp);//函数声明
    int reduce(opt2 opt2,int *arr,int n);
    int add(int m,int n);
    int sub(int m,int n);
    int addall(int *arr,int n);
    
    
    int main() {
    
    
        int n;//定义数组长度
        printf("please enter arr[number]--number:");
        scanf("%d",&n);
        int a[n];
        int *p=a;
        printf("please enter arr[number]--arr[]:");
        for(;p<a+n;p++){
    
    
            scanf("%d",p);
        }
        p=a;
        printf("The original arr[number] is:");
        for(;p<a+n;p++){
    
    
            printf("%3d",*p);
        }
        printf("\n");
        printf("please enter 0-->map or 1-->reduce .");
        int x;
        scanf("%d",&x);
       

add函数sub函数指针可作为实参 传入map函数 选择性进行操作,这样子写的好处是函数封装性良好,灵活性强,可按需增加其他操作。

        if(x==0){
    
    
            int (*temp)(int,int);
            printf("please enter 01-->add or 02-->sub");
            int y;
            scanf("%d",&y);
            if(y==01){
    
    
                printf("arr[number] is changed by using add from map.");
                temp=add;
            }
            if(y==02){
    
    
                printf("arr[number] is changed by using sub from map.");
                temp=sub;
            }
            int *p0=(int *)malloc(sizeof(int)*n);
            int *p2=map(temp,a,n,p0);
            for(int i=0;i<n;i++,p2++){
    
    
                printf("%3d",*p2);
            }
            printf("\n");
            free(p0);
        }
        if(x==1){
    
    
            printf("arr[number] is changed by using addall from reduce.");
            printf("%3d",reduce(addall,a,n));
            printf("\n");
        }
        return 0;
    }
   
函数部分
    int *map(opt opt1,int *arr,int n,int *temp){
    
    
        int *temp1=temp;
        for(int *p=arr;p<arr+n;p++){
    
    
            *temp1=opt1(*p,1);
            *temp1++;
        }
        return temp;
    }
    
    int add(int m,int n){
    
    
        return m+n;
    }
    
    int sub(int m,int n){
    
    
        return m-n;
    }
    int reduce(opt2 opt2,int *arr,int n){
    
    
        return opt2(arr,n);
    }
    
    int addall(int *arr,int n){
    
    
        int all;
        for(int *p=arr;p<arr+n;p++){
    
    
            all+=*p;
        }
        return all;
 

总结

初学编程时,不仅仅是把要求做到,输出正确的结果,更重要的是,提高代码的可读性、封装性、健壮性,多思考如何才能让自己的代码风格运用自如。

ps:
   留作总结,希望各位大神指正。

猜你喜欢

转载自blog.csdn.net/weixin_44290157/article/details/90302192