最好将vec 视为一个向量,其元素恰好是
vector-of-vectors-of-double,而不是多维结构。
你可能知道,但是只是以防万一你不知道,我会提到它,
这个数据类型不一定代表一个矩形长方体。
vec 只有在 你 确保所有向量都为
每个级别的大小相同。数据类型对矢量vec[j] 非常满意
与vec[k] 和vec[j][n] 的尺寸不同
成为与vec[j][m] 不同大小的向量,从而使您的结构“锯齿状”。
所以你想得到一个指向vector<vector<double>> 的指针,它位于
vec 中的索引 1。你可以这样做:
vector<vector<double>> * pmatrix = &vec[1];
然而,这个指针将是一种不必要的笨拙方式来访问它
vector<vector<double>>。你肯定写不出来
比如:
double d = pmatrix[j][k];
并期望在“处理的矩阵”中的坐标 (j,k) 处获得 double
由pmatrix"。因为pmatrix 是一个指向向量的双倍向量的指针;
所以pmatrix[j] 指的是 vector-of-vector-of-double (不是vector-of-double)
在索引j 来自pmatrix,其中索引的步骤为
sizeof(vector<vector<double>>)。该声明将引用谁知道什么
内存,很可能会使您的程序崩溃。
相反,您必须编写类似的:
double d = (*pmatrix)[j][k];
(*pmatrix) 为您提供vector-of-vector-of-double 由pmatrix 寻址,
或等效但更令人困惑:
double d = pmatrix[0][j][k];
简单得多 - 因此,自然的 C++ 方式 - 是采用 reference,
而不是指针,指向vec 中索引 1 处的vector<vector<double>>。你
只需这样做:
vector<vector<double>> & matrix = vec[1];
现在,matrix 只是 另一个名称,用于 vec 中索引 1 处的 vector<vector<double>>,
并且您可以像您期望的那样以矩阵方式处理它(总是假设
你已经确定它是一个矩阵,而不是一个锯齿状数组)。
manu343726 在评论中提出了另一件需要考虑的事情。你
希望收到此引用的代码 vec[1] 能够
使用它来修改 vec[1] 的内容 - 这将包括更改其
大小或其中任何vector<double>s 的大小?
如果您允许修改,那很好。如果你不那么你想得到
常量引用。你可以这样做:
vector<vector<double> > const & matrix = vec[1];
可能,您希望接收代码能够修改doubles
但不是包含它们的向量的大小?在这种情况下,std::vector
是您的应用程序的错误容器类型。如果那是你的立场,我
可以更新此答案以提供替代容器。