对于 C++ 中的向量,我有
class Vec
{
public:
int len;
double * vdata;
Vec();
Vec(Vec const & v)
{
cout<<"Vec copy constructor\n";
len = v.len;
vdata=new double[len];
for (int i=0;i<len;i++) vdata[i]=v.vdata[i];
};
如果您能帮助我如何为矩阵编写类似的代码,我将不胜感激。我在想这样的事情:
class Mat
{
public:
int nrows;
int ncols;
double * mdata;
Mat();
Mat(Mat const & m)
{
cout<<"Mat copy constructor\n";
nrows = m.nrows;
ncols = m.ncols;
但是我不知道如何使用首先将所有元素放入一维数组(row1 row2 ... rown)然后我们将数组分成行然后将每一行分成的想法来编码矩阵的内存分配列。特别是,您能帮我将这个想法翻译成类似于以下内容的 C++ 语言:
vdata=new double[len];
for (int i=0;i<len;i++) vdata[i]=v.vdata[i];
};
我在想这样的事情:
double *data=new double[nrows*ncols];
for (int i=0;i<nrows;i++)
{
for (int j=0;j<ncols,j++){data(i,j)=m.mdata[i][j]};
};
但我不确定这部分:
data(i,j)=m.mdata[i][j]
另外,我应该使用纯虚拟元素索引方法:Mat 对象 m 的 (i,j) 元素将由 m(i,j) 检索。我必须提供此索引运算符的 const 和非 const 版本。<-- 你能告诉我如何做到这一点吗?
非常感谢。