首页 新闻 会员 周边 捐助

C++类的定义

0
悬赏园豆:10 [已解决问题] 解决于 2014-01-13 01:07

我想写一个my matlab,实现简单的矩阵运算功能,仿照matlab。定义矩阵的时候有一个问题

两个定义方法,不知道那种好一点,请大家不吝赐教啊:

第一种:

class

{

  private:

    int height;/*矩阵的行数*/

    int width;/*矩阵的列数*/

    double *arr;/*矩阵数组*/

  public:

    。。。

}

第二种:

class

{

  private:

    int height;/*矩阵的行数*/

    int width;/*矩阵的列数*/

    double arr[100][100];/*矩阵数组*/

  public:

    。。。

}

第一种的话可以计算很大的矩阵,但是听别人说这样不太好;

第二种浪费,而且计算有限。

不知道还有什么解决方案么?

永久指针的主页 永久指针 | 初学一级 | 园豆:195
提问于:2014-01-11 21:45
< >
分享
最佳答案
0

学下模板

我很早之前写过这个功能.把类的定义代码发给你.实现的代码你自己写吧.

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);

收获园豆:10
叶飞影 | 菜鸟二级 |园豆:213 | 2014-01-12 16:03

xie xie !

永久指针 | 园豆:195 (初学一级) | 2014-01-13 01:06
其他回答(2)
0

本人主修c#.c++为初学 ,我认为第一种当然好了,不知道有什么不好,只要指针玩的好,那就一定很厉害,指针是C++的灵魂。

空明流光 | 园豆:111 (初学一级) | 2014-01-11 21:59

enen

支持(0) 反对(0) 永久指针 | 园豆:195 (初学一级) | 2014-01-13 01:06
0

第一张方式灵活高效一些、第二种方式简单一些。个人觉得不存在性能问题的情况下,使用第二种方式吧。开发、维护都要方便一些。

但需要注意的一点是:第二种方式对象较大,如果作为局部变量(栈对象)大量使用时会占用大量栈空间。

天方 | 园豆:5432 (大侠五级) | 2014-01-12 14:21

enen

支持(0) 反对(0) 永久指针 | 园豆:195 (初学一级) | 2014-01-13 01:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册