多层Vector指针套嵌与调用有关问题
多层Vector指针套嵌与调用问题
如题,因为一个算法解决需要,设计以下算法,肯定存在许多错误,设计目的如下:
struct P3DNode //结构体
{
int level;
int PointNum;
vector PointID(10);
};
vector <P3DNode> SpTreeZ; //包含P3DNode结构体vector
vector < SpTreeZ *> SpTreeY; // 包含SpTreeZ指针的vector
vector < SpTreeY *> SpTreeX; // 包含SpTreeY指针的vector
//******使用方法:
//1、逐层赋值:
P3DNode PointTmp;
PointTmp.level=3;
//2、vector赋值
for(int i=0;i<10;i++)
{
PointTmp.level=i;
SpTreeZ.push_back(PointTmp);
}
SpTreeY.push_back(&SpTreeZ);
SpTreeX.push_back(&SpTreeY[0]);
//使用第二个结构体的level值
int TestData=SpTreeX[0]->SpTreeY[0]->SpTreeZ[1].Level;
以上哪些地方错误,请指正,以便达到以上目的;
------解决方案--------------------
int TestData=SpTreeX[0]->SpTreeY[0]->SpTreeZ[1].Level;
有误
SpTreeX[0]是SpTreeY *指针变量,怎么能->SpTreeY[0]?
后面一样是这样的错误
另外,vector创造会构造相关变量,它内部申请新空间是它的事情,和外面的没关系
------解决方案--------------------
------解决方案--------------------
vector < SpTreeZ *>容器中 存储的是指针,复制起来比引用块的很多,而且这个VECTOR工作效率主要还是跟其成员类有关, 每次拷贝都要析构一次,这样才使得效率变低。
这句话什么意思,解释一下,好不
vector在一个类中,作为这个类的成员对象,
为什么每次拷贝都要析构??
------解决方案--------------------
多层vector不如多维数组简单。比如:
如题,因为一个算法解决需要,设计以下算法,肯定存在许多错误,设计目的如下:
struct P3DNode //结构体
{
int level;
int PointNum;
vector PointID(10);
};
vector <P3DNode> SpTreeZ; //包含P3DNode结构体vector
vector < SpTreeZ *> SpTreeY; // 包含SpTreeZ指针的vector
vector < SpTreeY *> SpTreeX; // 包含SpTreeY指针的vector
//******使用方法:
//1、逐层赋值:
P3DNode PointTmp;
PointTmp.level=3;
//2、vector赋值
for(int i=0;i<10;i++)
{
PointTmp.level=i;
SpTreeZ.push_back(PointTmp);
}
SpTreeY.push_back(&SpTreeZ);
SpTreeX.push_back(&SpTreeY[0]);
//使用第二个结构体的level值
int TestData=SpTreeX[0]->SpTreeY[0]->SpTreeZ[1].Level;
以上哪些地方错误,请指正,以便达到以上目的;
------解决方案--------------------
int TestData=SpTreeX[0]->SpTreeY[0]->SpTreeZ[1].Level;
有误
SpTreeX[0]是SpTreeY *指针变量,怎么能->SpTreeY[0]?
后面一样是这样的错误
另外,vector创造会构造相关变量,它内部申请新空间是它的事情,和外面的没关系
------解决方案--------------------
------解决方案--------------------
vector < SpTreeZ *>容器中 存储的是指针,复制起来比引用块的很多,而且这个VECTOR工作效率主要还是跟其成员类有关, 每次拷贝都要析构一次,这样才使得效率变低。
这句话什么意思,解释一下,好不
vector在一个类中,作为这个类的成员对象,
为什么每次拷贝都要析构??
------解决方案--------------------
多层vector不如多维数组简单。比如:
- C/C++ code
//在堆中开辟一个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 //-------------------- //======================= //