请问怎么存储一个长度可变的多维数组
请教如何存储一个长度可变的多维数组?
例如一个三维数组,第一维长度是200.第二维也是200,第三维长度不定,可能是3也可能是300
(另外还有一个参数用于指定第三维的权重。这个权重可以用另外开辟一个200*200的数组保存)
如果分配成200*200*300就太浪费了,想问一下这种情况,使用什么方法存储比较好?
我原来打算用结构体数组的,这样数组为大小为200*200,每个数组的元素是一个结构体,
结构体中包含三个元素,第一个元素是数组长度,第二个元素是权重,第三个元素是数组。
但是发现这样也挺麻烦。
请问这种情况下一般使用什么方法保存?
------解决方案--------------------
------解决方案--------------------
http://blog.****.net/supermegaboy/article/details/4854899
------解决方案--------------------
malloc一下不就行了
------解决方案--------------------
指针数组,动态分配吧。
------解决方案--------------------
vector<vector <int> >vvi;
------解决方案--------------------
动态分配空间 malloc calloc realloc
------解决方案--------------------
例如一个三维数组,第一维长度是200.第二维也是200,第三维长度不定,可能是3也可能是300
(另外还有一个参数用于指定第三维的权重。这个权重可以用另外开辟一个200*200的数组保存)
如果分配成200*200*300就太浪费了,想问一下这种情况,使用什么方法存储比较好?
我原来打算用结构体数组的,这样数组为大小为200*200,每个数组的元素是一个结构体,
结构体中包含三个元素,第一个元素是数组长度,第二个元素是权重,第三个元素是数组。
但是发现这样也挺麻烦。
请问这种情况下一般使用什么方法保存?
------解决方案--------------------
------解决方案--------------------
http://blog.****.net/supermegaboy/article/details/4854899
------解决方案--------------------
malloc一下不就行了
------解决方案--------------------
指针数组,动态分配吧。
------解决方案--------------------
vector<vector <int> >vvi;
------解决方案--------------------
动态分配空间 malloc calloc realloc
------解决方案--------------------
- C/C++ code
//在堆中开辟一个4×5的二维int数组 #include <stdio.h> #include <malloc.h> int **p; int i,j; void main() { p=(int **)malloc(4*sizeof(int *)); if (NULL==p) return; for (i=0;i<4;i++) { p[i]=(int *)malloc(5*sizeof(int)); if (NULL==p[i]) return; } for (i=0;i<4;i++) { for (j=0;j<5;j++) { p[i][j]=i*5+j; } } for (i=0;i<4;i++) { for (j=0;j<5;j++) { printf(" %2d",p[i][j]); } printf("\n"); } for (i=0;i<4;i++) { free(p[i]); } free(p); } // 0 1 2 3 4 // 5 6 7 8 9 // 10 11 12 13 14 // 15 16 17 18 19 //在堆中开辟一个3×4×5的3维int数组 #include <stdio.h> #include <malloc.h> int ***p; int i,j,k; void main() { p=(int ***)malloc(3*sizeof(int **)); if (NULL==p) return; for (i=0;i<3;i++) { p[i]=(int **)malloc(4*sizeof(int *)); if (NULL==p[i]) return; for (j=0;j<4;j++) { p[i][j]=(int *)malloc(5*sizeof(int)); if (NULL==p[i][j]) return; } } for (i=0;i<3;i++) { for (j=0;j<4;j++) { for (k=0;k<5;k++) { p[i][j][k]=i*20+j*5+k; } } } for (i=0;i<3;i++) { for (j=0;j<4;j++) { for (k=0;k<5;k++) { printf(" %2d",p[i][j][k]); } printf("\n"); } printf("---------------\n"); } for (i=0;i<3;i++) { for (j=0;j<4;j++) { free(p[i][j]); } free(p[i]); } free(p); } // 0 1 2 3 4 // 5 6 7 8 9 // 10 11 12 13 14 // 15 16 17 18 19 //--------------- // 20 21 22 23 24 // 25 26 27 28 29 // 30 31 32 33 34 // 35 36 37 38 39 //--------------- // 40 41 42 43 44 // 45 46 47 48 49 // 50 51 52 53 54 // 55 56 57 58 59 //--------------- //在堆中开辟一个2×3×4×5的4维int数组 #include <stdio.h> #include <malloc.h> int ****p; int h,i,j,k; void main() { p=(int ****)malloc(2*sizeof(int ***)); if (NULL==p) return; for (h=0;h<2;h++) { p[h]=(int ***)malloc(3*sizeof(int **)); if (NULL==p[h]) return; for (i=0;i<3;i++) { p[h][i]=(int **)malloc(4*sizeof(int *)); if (NULL==p[h][i]) return; for (j=0;j<4;j++) { p[h][i][j]=(int *)malloc(5*sizeof(int)); if (NULL==p[h][i][j]) return; } } } for (h=0;h<2;h++) { for (i=0;i<3;i++) { for (j=0;j<4;j++) { for (k=0;k<5;k++) { p[h][i][j][k]=h*60+i*20+j*5+k; } } } } for (h=0;h<2;h++) { for (i=0;i<3;i++) { for (j=0;j<4;j++) { for (k=0;k<5;k++) { printf(" %3d",p[h][i][j][k]); } printf("\n"); } printf("--------------------\n"); } printf("=======================\n"); } for (h=0;h<2;h++) { for (i=0;i<3;i++) { for (j=0;j<4;j++) { free(p[h][i][j]); } free(p[h][i]); } free(p[h]); } free(p); } // 0 1 2 3 4 // 5 6 7 8 9 // 10 11 12 13 14 // 15 16 17 18 19 //-------------------- // 20 21 22 23 24 // 25 26 27 28 29 // 30 31 32 33 34 // 35 36 37 38 39 //-------------------- // 40 41 42 43 44 // 45 46 47 48 49 // 50 51 52 53 54 // 55 56 57 58 59 //-------------------- //======================= // 60 61 62 63 64 // 65 66 67 68 69 // 70 71 72 73 74 // 75 76 77 78 79 //-------------------- // 80 81 82 83 84 // 85 86 87 88 89 // 90 91 92 93 94 // 95 96 97 98 99 //-------------------- // 100 101 102 103 104 // 105 106 107 108 109 // 110 111 112 113 114 // 115 116 117 118 119 //-------------------- //======================= //