繁体   English   中英

C ++中的矩阵类:一种解释

[英]Matrix Class in C++: An Explanation

我目前正在浏览c ++代码的一些旧的大学片段。 那时,另一个类被指派使用双指针和2D数组进行矩阵类。 幸运的是(或事后不幸)我从来没有机会学到这样的东西。 当我们毕业以供将来审查时,我借用了他们的代码。 如果有人可以请向我解释这个片段到底发生了什么:

  //This is a constructor of a 1x1 matrix
  signal::signal(){
     _nrows = 1;
     _ncols = 1;
     _coef = new double*[_nrows];
     _coef[0] = new double[_ncols];
     _coef[0][0] = 0.0;
  }

只是一个旁注,_coef是双重类型的**。

根据我的理解,_nrows和_ncols的值为1(表示它们的大小)。 然后,代码动态地在堆中创建一个double * out,其元素等于_nrows; 问题是,我不知道接下来会发生什么。 为什么对应于_ncols的数组不是指针? 为什么分配_coef [0]?

在内存中,二维数组(n,m)或多或少看起来像这样

_coef -> | _coef[0] -> {1, 2, 3, ..., m}
         | _coef[1] -> {1, 2, 3, ..., m}
         | _coef[2] -> {1, 2, 3, ..., m}
         | ...
         | _coef[n] -> {1, 2, 3, ..., m}

_coef指向n指针的数组。 并且这些指针中的每一个都指向m双精度数组。

所以,在你的情况下, _coef指向一个1指针的数组,这个指针指向一个double的数组。

现在回答你的问题

  1. 它不是一个指针,因为在你的第二个维度中,你最终想要存储双打,而不是指针。
  2. 它被分配给_coef[0] ,因为它是二维数组的第一个也是唯一的一行。

正如你所说,前两行为每个_nrows_ncols分配值1

以下行动态分配double* (指向double指针)数组。 分配的double*对象的数量是_nrows (在您的情况下为1 )。 可以认为该语法与定义普通自动数组类似, double* array[1] ,其中元素的数量为1 然后_coef是指向第一个double指针的指针。 我将以图解方式表示内存表示:

_nrows = 1
_ncols = 1
_coef  ---> _coef[0] ---> Currently points nowhere in particular

所以,现在你有_nrowsdouble*一字排开在内存中。 _coef[0]指的是那些double*的第一个。 新的动态分配数组(此时为double s)由size _ncols创建。 指向第一个double s的指针被分配给_coef[0] 也就是说,第一个动态分配的数组中的第一个double*现在指向第二个动态分配的数组中的第一个double

_nrows = 1
_ncols = 1
_coef  ---> _coef[0] ---> _coef[0][0]

然后_coef[0][0] = 0.0将第二个动态分配的数组中的第一个double设置为0 因为它是唯一的 double ,因为两个动态分配的数组的大小都是1 ,所以你已经将所有double s初始化为0。

_nrows = 1
_ncols = 1
_coef  ---> _coef[0] ---> _coef[0][0] = 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM