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:
留作总结,希望各位大神指正。