将数据从一个矩阵复制到另一个矩阵

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)

但没有成功,不知道原因。有人可以建议我更好的解决方案吗?

Goz*_*Goz 5

解决这个问题的一种方法是使用大小为宽度*高度的一维数组。这样你就可以轻松地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/