数组的两种连接方式
编译环境:Dev 5.6.1 C++
#include<cstdio> #include<cstdlib> #include<cstring> class Node { public: int **data; int hang; int lie; Node() { data=NULL; } Node(int h,int l) { hang=h; lie=l; data=(int **)malloc(hang*sizeof(int *)); for(int i=0;i<lie;i++) { data[i]=(int *)malloc(sizeof(int )*lie); } } Node(int h,int l,int **a) { hang=h; lie=l; data=(int **)malloc(sizeof(int *)*hang); for(int i=0;i<lie;i++) { data[i]=(int *)malloc(sizeof(int )*lie); } for(int i=0;i<hang;i++) { for(int j=0;j<lie;j++) { data[i][j]=a[i][j]; } } } Node(const Node &deepCopy) { // printf("深拷贝\n"); hang=deepCopy.hang; lie=deepCopy.lie; data=(int **)malloc(hang*sizeof(int *)); for(int i=0;i<hang;) { data[i]=(int *)malloc(lie*sizeof(int)); } for(int i=0;i<hang;i++) { for(int j=0;j<lie;j++) { data[i][j]=deepCopy.data[i][j]; } } // printf("拷贝结束\n"); } ~Node() { // printf("start to free %p\n",data); for(int i=0;i<hang;i++) { if(data[i]!=NULL) { // printf("data[%d]==%p",i,data[i]); free(data[i]); data[i]=NULL; // printf(" change to %p\n",data[i]); } } if(data!=NULL) { // printf("data==%p\n",data); free(data); data=NULL; } // printf("end of free\n"); } void del() { // printf("start to free %p\n",data); for(int i=0;i<hang;i++) { if(data[i]!=NULL) { // printf("data[%d]==%p",i,data[i]); free(data[i]); data[i]=NULL; // printf(" change to %p\n",data[i]); } } if(data!=NULL) { // printf("data==%p\n",data); free(data); data=NULL; } // printf("end of free\n"); } void Print() { printf("[ "); for(int i=0;i<hang;i++) { printf("[ "); for(int j=0;j<lie;j++) { printf("%d",data[i][j]); if(j!=lie-1) { printf(","); } } printf(" ]"); if(i!=hang-1) { printf(","); } } printf(" ]\n"); } void concat(int mode,Node &a,Node &b) { if(data!=NULL) { del(); } int chang,kuan; chang=a.lie; kuan=a.hang; if(mode) { hang=kuan; lie=chang*2; data=(int **)malloc(hang*sizeof(int *)); for(int i=0;i<kuan;i++) { data[i]=(int *)malloc(lie*sizeof(int)); } for(int i=0;i<a.hang;i++) { for(int j=0;j<a.lie;j++) { data[i][j]=a.data[i][j]; } } for(int i=0;i<b.hang;i++) { for(int j=a.lie;j<a.lie+b.lie;j++) { data[i][j]=b.data[i][j-a.lie]; } } } else { hang=kuan*2; lie=chang; data=(int **)malloc(hang*sizeof(int *)); for(int i=0;i<hang;i++) { data[i]=(int *)malloc(lie*sizeof(int)); } for(int i=0;i<a.hang;i++) { for(int j=0;j<a.lie;j++) { data[i][j]=a.data[i][j]; } } for(int i=a.hang;i<a.hang+b.hang;i++) { for(int j=0;j<b.lie;j++) { data[i][j]=b.data[i-a.hang][j]; } } } } }; int main() { // t1.data={{1,2,3},{4,5,6}}; Node t1(2,3); for(int i=0;i<2;i++) { for(int j=0;j<3;j++) { t1.data[i][j]=i*3+j+1; } } printf("t1为:\n"); t1.Print(); printf("***************\n"); // int t2[][3]={{7,8,9},{10,11,12}}; Node t2(2,3); for(int i=0;i<2;i++) { for(int j=0;j<3;j++) { t2.data[i][j]=i*3+j+7; } } printf("t2为:\n"); t2.Print(); printf("***************\n"); Node tt1; tt1.concat(0,t1,t2); printf("tt.concat 0模式链接:\n"); tt1.Print(); printf("***************\n"); tt1.concat(1,t1,t2); printf("tt.concat 1模式链接:\n"); tt1.Print(); return 0; }