用C++构造一个矩阵——矩阵的定义与初始化

最近需要做一个项目需要进行矩阵运算,第一时间想到的就是一个Eigen的库,但是装好以后发现Eigen库无法实现变量X变量的矩阵类型(也可能是我没有发现怎么使用这个库)。

于是决定自己写一个矩阵。

最开始定义了一个结构体:

typedef struct
{
	int row,col;//行,列
	double **data;
}Matrix;

其中定义了一个二维指针作为存储矩阵内容内存空间的指引,首先需要根据行列申请一块内存空间:

	void create()
	{
		double **_data = new double*[row];
		for (int i = 0; i < row; i++)
		{
			_data[i] = new double[col];
		}
		data = _data;
	}

以上代码可以直接放进结构体中,以上代码也花了一些时间理解,C++中无法直接使用new定义二维数组。

所以采用中转的思路,先定义一个二维指针**data指向一组一维指针数组,再为每一个指针分配一个一维数组。

如果难以理解可以看我打个比方,
有一个领队先找了10个小队长,10个小队长就是一个地址数组,int*[10],然后10个小队长又为自己各自找了9个队员,每个队长负责的小队就是一个数组,int[10],直接储存数据的数组,最后加起来就是一个10*10=100的二维数组。

以上就完成了二维数组内存空间的分配。

而向double **data中传入数据时需要注意double **和double[][]的区别

int a[2][2]={{...},{...}};

void fun(int **src)
{
...
}

main()
{
	fun(a);
}

理论上来说a也是一个指针,是a[2][2]数组的首地址和&a[0][0]一个作用,但是fun(a)的写法在编译器中会报错,提示int a[2][2]无法转换为int **。如果非要传入参数可以使用fun((int **)a)直接强制转换,能够通过编译,但是会出现其他问题,不推荐这种方法。

  • 9
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值