Chinaunix首页 | 论坛 | 博客
  • 博客访问: 58205
  • 博文数量: 11
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 140
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 15:19
文章分类
文章存档

2017年(2)

2011年(1)

2010年(1)

2009年(7)

我的朋友

分类: C/C++

2017-03-17 16:00:34

    在前面实现的CMatrix类里面,通常需要在定义的时候就将其矩阵元素进行初始化。可采用类似于数组和二维数组的方式,通过初始化列表来实现初始化CMatrix:

点击(此处)折叠或打开

  1. typedef std::initializer_list<double> MatIniLst;
  2. class CMatrix
  3. {
  4. public:
  5.     UINT r;
  6.     UINT c;
  7.     MatMemSP sp_e;
  8.     double* e;

  9.     CMatrix(const MatIniLst &lst){
  10.         int i = 0;

  11.         r = 1;
  12.         c = lst.size();
  13.         sp_e = MatMemSP(new double[r*c]);
  14.         e = sp_e.get();

  15.         for (auto itm : lst)
  16.         {
  17.             e[i++] = itm;
  18.         }
  19.     };

  20.     CMatrix(const std::initializer_list<MatIniLst> &lst)
  21.     {
  22.         int i = 0;

  23.         r = lst.size();
  24.         c = lst.begin()->size();

  25.         sp_e = MatMemSP(new double[r*c]);
  26.         e = sp_e.get();

  27.         for (auto itm:lst)
  28.         {
  29.             for (auto val:itm)
  30.             {
  31.                 e[i++] = val;
  32.             }
  33.         }
  34.     };
  35.       
  36.         ...
  37. }
    前面一个构造函数实现的就是类似于数组的初始化过程,如下面的语句则定义了一个1*3的矩阵。:

点击(此处)折叠或打开

  1. double Wo = 2 * PI*m_Fo;
  2. CMatrix num = { 0.0, 0.0, Wo*Wo };
    而第二个构造函数则采用类似于二维数组的方式对矩阵元素进行初始化,如下面的语句定义了一个2*2的矩阵:

点击(此处)折叠或打开

  1. CMatrix Vac_Init = { {1, 2}, {0, 4} };
    initializer_list有三个函数,即size(),begin()和end()。其中size返回列表中元素的个数,而begin则返回指向列表启示的指针,end指向列表结束的指针。指针的类型则与initializer_list中T的类型一致。上面第一个构造函数里面获取列表元素的代码也可以改成如下代码:

点击(此处)折叠或打开

  1. const double *p;
  2. for (p= lst.begin(); p!=lst.end(); p++)
  3. {
  4.     e[i++] = *p;
  5. }
    构造函数定义中的const是必须要的,否则会导致编译错误。



阅读(950) | 评论(0) | 转发(0) |
0

上一篇:共享指针shared_ptr还蛮好用的!

下一篇:没有了

给主人留下些什么吧!~~