读书人

怎么实现如下的二维数组

发布时间: 2013-08-01 15:23:18 作者: rapoo

如何实现如下的二维数组
如何实现如下的二维数组
0,
1,2,
3,4,5,
6,7,8,9
它的列数不固定,行数不固定,用STL可以实现吗?
[解决办法]
仅供参考

//在堆中开辟一个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

[解决办法]

//C:
//1)
int x1[]={0};
int x2[]={1,2};
int x3[]={3,4,5};
int x4[]={6,7,8,9};
int ** p={&x1,&x2,&x3,&p4};
int i,j;
for(i=0;i<=3;i++){
for(j=0;j<=i;j++){
printf("%4d,"p[i][j]);
}
}
//2)
int x[]={0,1,2,3,4,5,6,7,8,9};
int ** p={&x,&(x+1),&(x+3),&(x+6)};


int i,j;
for(i=0;i<=3;i++){
for(j=0;j<=i;j++){
printf("%4d,"p[i][j]);
}
}
//C++ :
//3)
vector< vector <int> >v;
int i,j,k;
k=0;
v.resize(4);
for(i=1;i<=4;i++){
v[i-1].reserve(i)
for(j=0;j<i;j++){
v[i-1].push_back(k);
}
}
for(i=1;i<=4;i++){
for(j=0;j<i;j++){
printf("%4d,"p[i][j]);
}
}


[解决办法]
0,
1,2,
3,4,5,
6,7,8,9

----- 只要一个 int buf[10]
要存取第r行第c列,只需要 buf[ r*(r+1)/2 + c ] 就行了
如果你这么这么做有点土,写个类封装一下即可。
[解决办法]
使用vector<vector<int> > vt;解决该问题足够了啊……

读书人网 >C++

热点推荐