我对C ++比较陌生,并且遇到了这个问题。我有999x1点坐标向量,我想用333x3矩阵动态转换它。除此之外,我为一个项目使用不同的Cpp文件,因此读取点集的函数位于不同的文件中。如何制作这个矩阵以及如何在主代码中访问它?
我尝试使用vector<vector<float> > Mymatrix
的东西,但你需要在这种定义中指定行和列大小,直到我读取文件才能得到。如果我尝试在读取pointset文件的函数中声明Mymatrix变量,则其范围受到限制,我不能在main.cpp中使用该Mymatrix。
这里编写代码有点困难,因为它与其他文件有很多链接。我希望你有我的问题!请帮我解决这个问题...提前致谢!
答案 0 :(得分:0)
vector实际上只是数组的容器。基本上你所拥有的是int A[999]
,并希望将其转换为int M[333][3]
;
考虑到在内存中,1D和2D数组都存储在连续的内存区域中,您可以通过多种方式实现此目的:
- use a pointer and two indexes i, j: the first 3 elements are your first row,
the next 3 elements your second row and so on.
int vector<int> v;
int *p, i=0,j=0; // i=[0..332], j=[0..2]
p=&v[0];
*(p+(i*3)+j); //this is the same as p[i][j];
或声明矩阵(为其分配静态或动态内存)并复制矩阵中的所有元素:
int M[333][3]; //i'll go with static allocation for this example
for(i=0;i<333;i++)
for(j=0;j<3;j++)
M[i][j] = v[i*3 + j];
选择你想要的方法 - 第一个方法的优点是它不会给我们带来额外的记忆。
答案 1 :(得分:-1)
您可以将MyMatrix创建为指针并将其作为参数传递给您的函数:
vector<vector<float> >* Mymatrix; //Don't forget to initialize the pointer
functionThatReadsFiles(Mymatrix); //That function makes changes to Mymatrix
这样,您在“functionThatReadsFiles”中对Mymatrix所做的任何更改都将在调用后保留。无论如何,在尝试之前,请确保完全理解如何使用指针进行操作。
正如@erlc所说,你也可以用:
声明你的功能void functionThatReadsFiles(vector<vector<float> >& Mymatrix);
并且调用只是正常调用它(没有指针),并且更改将保留在您的Mymatrix中。