如何复制一个矩阵

How to copy a matrix?

本文关键字:一个 复制 何复制      更新时间:2023-10-16

我需要将我设置为M的矩阵复制到一个新的矩阵M2中并输出该矩阵。

如何做到这一点?

这是我到目前为止尝试的:

#include <iostream>
using namespace std;
#define N 24
void copy(int M[][N], int M2[][N], int ROWS, int COLS)
{
    int r, c;
    M2[r][c]= M[r][c];
    cout<< M2[r][c];
}
void print(int M[][N], int ROWS, int COLS)
{
    int r, c, row, col;
    row= 1;
    col= 1;
    M[row][col] = 2;
    for(r=0; r< ROWS; r++)
    {
        for(c=0; c < COLS; c++)
        {
            if(M[r][c]==0)
            {
                cout<<" ";
            }
            else if (M[r][c]==1)
            {
                cout<< "T";
            }
            else if (M[r][c]==2)
            {
                cout<< "*";
            }
            else
            {
                cout << M[r][c];
            }
        }
        cout <<endl; 
    }
}
void fill(int M[][N], int ROWS, int COLS, int row, int col)
{
    int r, c;    
    for(r=0; r< ROWS; r++)
    {
        for(c=0; c < COLS; c++)
        {
            if (r == 0 || r == ROWS - 1) {
                M[r][c]=0;
            }
            else if(c == 0 || c == COLS -1) {
                M[r][c]=0;
            }
            else {
                M[r][c]= 1;  
            }
        }
    }
}
int main()
{
    int M[N/2][N];
    int M2[N/2][N];
    int ROWS, COLS;
    int r, c;
    ROWS = sizeof(M) / sizeof(M[0]);
    COLS = sizeof(M[0]) / sizeof(M[0][0]);
    fill(M, ROWS, COLS, 1, 1);
    print(M, ROWS, COLS);
    copy(M, M2, ROWS, COLS);
    return 0; 
}

这里有一个问题:

int r, c;
M2[r][c]= M[r][c];

您从未赋值rc,它们包含一些未知值,很可能超出0..ROWS-10..COLS-1的范围。

不要使用未初始化的值,特别是指针算术

要复制整个矩阵,您可能需要一些循环,就像在print函数中一样。

由于您使用二维数组来存储矩阵,因此将一个数组复制到另一个数组应该像调用memcpy一样简单。任何数组的内容(无论大小)都连续存储在内存中。

在复制函数中,只需放入以下代码行:

memcpy(M2, M1, r * c * sizeof(int));

在memcpy之前,确保为r和c分配了适当的值(显然,这应该是正确的行数和正确的列数)。