Mapeo de mapas simple autodefinido de C / C ++, función de reducción de convergencia, aplicación de función de primer conocimiento

Mapeo de mapas simple personalizado de C / C ++, función de reducción de convergencia, aplicación simple de funciones de primer conocimiento

Objetivos de aplicación del programa

Recientemente aprendí el lenguaje C / C ++, correspondiente a la aplicación de punteros y funciones de puntero, así como a declarar un nuevo tipo de typedef o usar llamadas a funciones.

Requisitos de procedimiento

Para personalizar una función de mapa , es necesario poder pasar una función de operación personalizada: realizar operaciones de suma o resta.
Personalizar una función de reducción , que requiere que cada número de la matriz se pueda agregar en un contenido según sea necesario. Aquí hay solo uno para la conveniencia de la expresión Función de acumulación: addall (int * arr, int n) .

Ejemplo de programa

    #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);
       

Los punteros de función de adición y subfunción se pueden pasar a la función de mapa como parámetros reales para operaciones selectivas.La ventaja de escribir de esta manera es que la función está bien encapsulada y es flexible, y se pueden agregar otras operaciones según sea necesario.

        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;
 

para resumir

Cuando aprenda a programar por primera vez, no solo debe cumplir con los requisitos y generar los resultados correctos, sino que, lo que es más importante, mejorar la legibilidad, encapsulación y solidez del código y pensar más en cómo puede usar su propio estilo de código libremente.

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

Supongo que te gusta

Origin blog.csdn.net/weixin_44290157/article/details/90302192
Recomendado
Clasificación