动态多维数据结构有关问题

动态多维数据结构问题本帖最后由 u011209118 于 2013-10-18 10:45:37 编辑设计一个动态数据结构,要求如下:

动态多维数据结构问题
本帖最后由 u011209118 于 2013-10-18 10:45:37 编辑 设计一个动态数据结构,要求如下:
1、m行×n列,m和n是动态的;
2、上述m行×n列中的每个元素,是一个动态的数组。
例如:一个3行×2列的类矩阵,其中第(0,0)个元素是一个int[10],第(0,1)个元素是一个int[20]...
怎么设计这样的数据结构会有较好的效率呢?
另外:m行和n列在建立数组之前已知,可以new出来,但是每个元素的长度是未知的,最好利用vector 动态 数据结构 多维
[解决办法]
用vector<vector>两级结构就好,当然list<list>/list<vector>/vector<list>也是可以的。

引用:
设计一个动态数据结构,要求如下:
1、m行×n列,m和n是动态的;
2、上述m行×n列中的每个元素,是一个动态的数组。
例如:一个3行×2列的类矩阵,其中第(0,0)个元素是一个int[10],第(0,1)个元素是一个int[20]...
怎么设计这样的数据结构会有较好的效率呢?
另外:m行和n列在建立数组之前已知,可以new出来,但是每个元素的长度是未知的,最好利用vector

[解决办法]

#include <vector>
#include <iostream>
using namespace std;

int main()
{
vector< vector<int> > ph;
vector<int> p;
p.push_back(1);
p.push_back(2);
p.push_back(3);
vector<int> q;
q.push_back(10);
q.push_back(20);
q.push_back(30);
q.push_back(40);
ph.push_back(p);
ph.push_back(q);
for (vector< vector<int> >::size_type u = 0; u < ph.size(); u++)
{
for (vector<int>::size_type v = 0; v < ph[u].size(); v++)
{
cout << ph[u][v] << " ";
}
cout << endl;
}
return 0;
}



引用:
能不能举个例子?


Quote: 引用:

用vector<vector>两级结构就好,当然list<list>/list<vector>/vector<list>也是可以的。

Quote: 引用:

设计一个动态数据结构,要求如下:
1、m行×n列,m和n是动态的;
2、上述m行×n列中的每个元素,是一个动态的数组。
例如:一个3行×2列的类矩阵,其中第(0,0)个元素是一个int[10],第(0,1)个元素是一个int[20]...
怎么设计这样的数据结构会有较好的效率呢?
另外:m行和n列在建立数组之前已知,可以new出来,但是每个元素的长度是未知的,最好利用vector

[解决办法]
int ***
//在堆中开辟一个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
//---------------

相关阅读 - 阅读人气排行