首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

怎么实现如下的二维数组

2013-08-01 
如何实现如下的二维数组如何实现如下的二维数组0,1,2,3,4,5,6,7,8,9它的列数不固定,行数不固定,用STL可以

如何实现如下的二维数组
如何实现如下的二维数组
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;解决该问题足够了啊……

热点排行