如何复制一个矩阵
How to copy a matrix?
我需要将我设置为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];
您从未赋值r
和c
,它们包含一些未知值,很可能超出0..ROWS-1
和0..COLS-1
的范围。
不要使用未初始化的值,特别是指针算术。
要复制整个矩阵,您可能需要一些循环,就像在print
函数中一样。
由于您使用二维数组来存储矩阵,因此将一个数组复制到另一个数组应该像调用memcpy一样简单。任何数组的内容(无论大小)都连续存储在内存中。
在复制函数中,只需放入以下代码行:
memcpy(M2, M1, r * c * sizeof(int));
在memcpy之前,确保为r和c分配了适当的值(显然,这应该是正确的行数和正确的列数)。
相关文章:
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 矢量如何将数据复制到另一个矢量?
- 为什么C++在将一个对象复制到另一个对象时需要对这两个对象进行低级常量限定
- 链表,将列表复制到另一个列表
- 关于复制构造函数的一个棘手问题
- 将指向给定子类的指针从一个向量复制到另一个向量
- 有没有办法使用 strcpy 将字符串数组复制到另一个字符串或其他数组中?
- 为什么 std::map emplace 需要在 gcc 上有一个复制构造函数
- C++使用默认的复制构造函数,即使用户使用模板定义了一个复制构造函数
- Rcpp 需要一个复制构造函数
- 你能为具有常量成员的联合编写一个复制构造函数吗?
- 需要一个复制构造函数
- 如何从点赞列表中创建一个复制构造函数
- 返回值优化是否需要声明一个复制构造函数
- 给出两个二进制数,将一个子集从一个复制到另一个
- 是否应该为具有指向其父对象的指针的对象定义一个复制构造函数
- 为什么不是只有一个?复制构造函数和赋值操作符
- 为什么编译器需要一个复制构造函数,需要并移动一个并且不使用它们中的任何一个?
- 另一个复制算法
- 创建一个复制构造函数,该构造函数对输入对象进行深度复制(使用数组)