E_l*_*ner 2 c++ pointers copy matrix
在 C++ 中,我试图将数据从一个矩阵复制到另一个矩阵。我的代码如下:
int data[height][width];
void MyCode::setData ( int newData[height][width] )
{
for ( int i = 0; i < height; i ++ )
{
for ( int j = 0; j < width; j ++ )
{
data[i][j] = newData[i][j];
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,这些“for”循环太耗时,并且代码就在这里停止(也许内存超载,我正在读取视频帧)。我想知道如何使用指针,如下所示:
int* data[height][width];
void MyCode::setData ( int* newData[height][width] )
{
data = newData;
}
Run Code Online (Sandbox Code Playgroud)
但没有成功,不知道原因。有人可以建议我更好的解决方案吗?
解决这个问题的一种方法是使用大小为宽度*高度的一维数组。这样你就可以轻松地memcpy两者之间的数据。
通过执行以下操作,可以轻松地从行和列中算出一维数组中的最终位置:
int index = column + (row * width);
Run Code Online (Sandbox Code Playgroud)
编辑:如果必须使用二维数组,则必须知道其中一个维度。
因此,您可以执行以下操作:
int data[height][width];
void MyCode::setData ( int (*newData)[width] )
{
for ( int i = 0; i < height; i ++ )
{
for ( int j = 0; j < width; j ++ )
{
data[i][j] = newData[i][j];
}
}
}
Run Code Online (Sandbox Code Playgroud)
在 C++ 中,你最好使用基于模板的解决方案之类的东西,尽管如果你传入一个高度尺寸错误的数组,你会遇到问题,并且编译器不会捕获它。
周围有很多模板矩阵库。例如:
http://sourceforge.net/projects/tmv-cpp/