如何将列向量转换为MxN矩阵? 我对C++比较陌生,在这个问题上有点困难。我有999x1的点坐标向量,我想把它转换成333x3矩阵。除此之外,我在一个项目中使用不同的Cpp文件,因此读取点集的函数位于不同的文件中。如何制作这个矩阵,我应该如何在我的主代码中访问它? 我尝试使用vector Mymatrixthing,但您需要在这种定义中指定行和列的大小,只有在读取文件后才能获得这种定义。如果我试图在读取点集文件的函数中声明上述Mymatrix变量,其作用域将受到限制,并且我无法在main.cpp中使用该Mymatrix。 在这里编写代码有点困难,因为它与其他文件有很多链接。我希望你有我的问题!请在这个问题上帮助我…提前谢谢

如何将列向量转换为MxN矩阵? 我对C++比较陌生,在这个问题上有点困难。我有999x1的点坐标向量,我想把它转换成333x3矩阵。除此之外,我在一个项目中使用不同的Cpp文件,因此读取点集的函数位于不同的文件中。如何制作这个矩阵,我应该如何在我的主代码中访问它? 我尝试使用vector Mymatrixthing,但您需要在这种定义中指定行和列的大小,只有在读取文件后才能获得这种定义。如果我试图在读取点集文件的函数中声明上述Mymatrix变量,其作用域将受到限制,并且我无法在main.cpp中使用该Mymatrix。 在这里编写代码有点困难,因为它与其他文件有很多链接。我希望你有我的问题!请在这个问题上帮助我…提前谢谢,c++,vector,matrix,C++,Vector,Matrix,您可以创建MyMatrix作为指针,并将其作为参数传递给函数: vector<vector<float> >* Mymatrix; //Don't forget to initialize the pointer functionThatReadsFiles(Mymatrix); //That function makes changes to Mymatrix vector*Mymatrix//不要忘记初始化指针 读取文件的函数(Mymatrix)//该函数对Myma

您可以创建MyMatrix作为指针,并将其作为参数传递给函数:

vector<vector<float> >* Mymatrix; //Don't forget to initialize the pointer
functionThatReadsFiles(Mymatrix); //That function makes changes to Mymatrix
vector*Mymatrix//不要忘记初始化指针
读取文件的函数(Mymatrix)//该函数对Mymatrix进行更改
这样,在“functionThatReadsFiles”中对Mymatrix所做的任何更改都将在调用后保留。无论如何,在尝试此操作之前,请确保您完全理解如何使用指针

正如@erlc所说,您还可以通过以下方式声明您的函数:

void functionThatReadsFiles(vector<vector<float> >& Mymatrix);
void读取文件的函数(vector和Mymatrix);

然后正常地调用它(不带指针),更改也会保留在Mymatrix中。

vector实际上只是数组的容器。所以基本上你有一个
inta[999]
,你想把它转换成
intm[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];
-使用一个指针和两个索引i,j:前3个元素是您的第一行,
接下来的3个元素是第二行,依此类推。
int向量v;
int*p,i=0,j=0;//i=[0..332],j=[0..2]
p=&v[0];
*(p+(i*3)+j)//这与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];
intm[333][3]//对于这个例子,我将使用静态分配

对于(i=0;iAvoid“文本墙”postsvector可以动态增长,那么为什么需要在这种定义中指定行和列的大小呢?这只是这个问题可能具有的多种解决方案之一。显然,存在另一种解决方案并不是对我进行向下投票的原因。您仍然在使用指针参数,为什么不将参数更改为引用e
void function that reads files(vector&)
hm对不起,你说得对。这是我用来编辑得太快的。谢谢!我后来自己弄明白了。我使用了与第二个方法完全相同的技术。静态分配。我还声明了类型为matrix的函数,并在最后返回了一个矩阵以使用不同的文件。:)无论如何谢谢你!请对您收到的任何有帮助的评论或回答进行投票:)