将数据从一个矩阵复制到另一个矩阵 在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]; } } }

将数据从一个矩阵复制到另一个矩阵 在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]; } } },c++,pointers,matrix,copy,C++,Pointers,Matrix,Copy,但是没有用,我不知道原因。有人能给我一个更好的解决方案吗 解决这个问题的一种方法是使用一个1D数组,该数组的大小为宽*高。通过这种方式,您可以轻松地在两者之间存储数据 通过执行以下操作,很容易从行和列中计算出1D数组中的最终位置: int index = column + (row * width); int data[height][width]; void MyCode::setData ( int (*newData)[width] ) { for ( int i = 0;

但是没有用,我不知道原因。有人能给我一个更好的解决方案吗

解决这个问题的一种方法是使用一个1D数组,该数组的大小为宽*高。通过这种方式,您可以轻松地在两者之间存储数据

通过执行以下操作,很容易从行和列中计算出1D数组中的最终位置:

int index = column + (row * width);
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];
        }   
    }       
}
编辑:如果必须使用二维阵列,则必须知道其中一个尺寸

因此,您可以执行以下操作:

int index = column + (row * width);
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];
        }   
    }       
}
int数据[高度][宽度];
void MyCode::setData(int(*newData)[宽度])
{   
对于(int i=0;i
<>在C++中,你最好使用像模板的解决方案,比如,如果你在一个错误的高度维度数组中传递,你会遇到问题,编译器不会被捕获。 有很多模板矩阵库。例如:


解决这个问题的一种方法是使用宽度*高度的1D数组。通过这种方式,您可以轻松地在两者之间存储数据

通过执行以下操作,很容易从行和列中计算出1D数组中的最终位置:

int index = column + (row * width);
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];
        }   
    }       
}
编辑:如果必须使用二维阵列,则必须知道其中一个尺寸

因此,您可以执行以下操作:

int index = column + (row * width);
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];
        }   
    }       
}
int数据[高度][宽度];
void MyCode::setData(int(*newData)[宽度])
{   
对于(int i=0;i
<>在C++中,你最好使用像模板的解决方案,比如,如果你在一个错误的高度维度数组中传递,你会遇到问题,编译器不会被捕获。 有很多模板矩阵库。例如:


看看Boost的多维数组。它可能实现更高效的复制操作:

此外,我还要看一下Blitz++。该LIB使用C++中的模板元编程来消除临时性,并且它们可能已经很好地优化了这些矩阵运算。这是他们的项目所述:

BLITIZ+++是一个C++计算类库,用于提供与FORTRAN 77/90相一致的性能计算。它使用模板技术来实现高性能。Blitz++提供密集数组和向量、随机数生成器和小向量(用于表示多分量或向量场)


希望有帮助

看看Boost的多维数组。它可能实现更高效的复制操作:

此外,我还要看一下Blitz++。该LIB使用C++中的模板元编程来消除临时性,并且它们可能已经很好地优化了这些矩阵运算。这是他们的项目所述:

BLITIZ+++是一个C++计算类库,用于提供与FORTRAN 77/90相一致的性能计算。它使用模板技术来实现高性能。Blitz++提供密集数组和向量、随机数生成器和小向量(用于表示多分量或向量场)


希望有帮助

谢谢你的回答。但我不能将矩阵重塑为一维,因为我在其他一些类中使用它作为二维。谢谢你的回答。但我无法将矩阵重塑为1D,因为我在其他一些类中使用它作为2D。你确定这是长时间工作的循环的
?您的阵列尺寸是否过大?我的阵列尺寸为600x800,来自视频帧,因此我认为大小不是导致问题的原因。您确定这是长时间工作的循环的
?您的阵列尺寸是否过大?我的阵列尺寸为600x800,来自视频帧,因此我认为大小不是导致问题的原因。