我想写一个my matlab,实现简单的矩阵运算功能,仿照matlab。定义矩阵的时候有一个问题
两个定义方法,不知道那种好一点,请大家不吝赐教啊:
第一种:
class
{
private:
int height;/*矩阵的行数*/
int width;/*矩阵的列数*/
double *arr;/*矩阵数组*/
public:
。。。
}
第二种:
class
{
private:
int height;/*矩阵的行数*/
int width;/*矩阵的列数*/
double arr[100][100];/*矩阵数组*/
public:
。。。
}
第一种的话可以计算很大的矩阵,但是听别人说这样不太好;
第二种浪费,而且计算有限。
不知道还有什么解决方案么?
学下模板
我很早之前写过这个功能.把类的定义代码发给你.实现的代码你自己写吧.
typedef unsigned long Yuint32;
typedef float Yreal32;
template <Yuint32 M, Yuint32 N>
class YtcMatrix
{
public:
union
{
Yreal32 matrix[M * N];
Yreal32 m[M][N];
};
//-----------------------------------------------------------
// Constructors
//-----------------------------------------------------------
YtcMatrix(); // Zero matrix
explicit YtcMatrix(Yreal32 a);
YtcMatrix(Yreal32* a);
YtcMatrix(const YtcMatrix& mtx);
//-----------------------------------------------------------
// Main function
//-----------------------------------------------------------
Yreal32& operator [] (Yuint32 i);
Yreal32 operator [] (Yuint32 i) const;
Yreal32& operator () (Yuint32 i, Yuint32 j);
Yreal32 operator () (Yuint32 i, Yuint32 j) const;
YtcMatrix<M, N>& operator = (const YtcMatrix<M, N>& mtx);
YtcMatrix<M, N>& operator += (const YtcMatrix<M, N>& mtx);
YtcMatrix<M, N>& operator -= (const YtcMatrix<M, N>& mtx);
YtcMatrix<M, N>& operator *= (Yreal32 f);
YtcMatrix<M, N>& operator /= (Yreal32 f);
};
还要实现以下这几个函数
template <Yuint32 M, Yuint32 N, Yuint32 K>
void YfMatrixTMultiply(YtcMatrix<M, N>& mDest, const YtcMatrix<M, K>& mLeft, const YtcMatrix<K, N>& mRight);
template <Yuint32 M, Yuint32 N>
bool YfMatrixTEquals(const YtcMatrix<M, N>& m1, const YtcMatrix<M, N>& m2, Yreal32 epsilon = YD_EPS_REAL32);
template <Yuint32 M, Yuint32 N>
void YfMatrixTTranspose(YtcMatrix<M, N>& mtxDest, const YtcMatrix<N, M>& mtxSrc);
template <Yuint32 M, Yuint32 N>
void YfVectorTTransform(YtsVector<N>& vDest, const YtsVector<M>& vSrc, YtcMatrix<M, N>& mtx);
xie xie !
本人主修c#.c++为初学 ,我认为第一种当然好了,不知道有什么不好,只要指针玩的好,那就一定很厉害,指针是C++的灵魂。
enen
第一张方式灵活高效一些、第二种方式简单一些。个人觉得不存在性能问题的情况下,使用第二种方式吧。开发、维护都要方便一些。
但需要注意的一点是:第二种方式对象较大,如果作为局部变量(栈对象)大量使用时会占用大量栈空间。
enen