如何在C++中获取多维向量的维度

How to get dimensions of a multidimensional vector in C++

本文关键字:向量 获取 C++      更新时间:2023-10-16

all

我正在使用多维 STL 向量将我的数据存储在C++中。我有一个3D矢量

 vector<vector<vector<double>>> vec;

我想从中检索的是:

 &vec[][1][];    // I need a pointer that points to a 2D matrix located at column 1 in vec

有人知道这样做吗?我将非常感谢任何帮助!

问候

最好vec视为元素恰好是向量对向量双精度,而不是作为多维结构。

你可能知道,但以防万一你不知道,我会提到它,此数据类型不一定表示矩形长方体vec只有当你确保所有的向量都是每个级别的大小相同。数据类型对向量vec[j]非常满意与vec[k]的尺寸不同,同样适用于vec[j][n] 成为与vec[j][m]大小不同的向量,因此您的结构是"锯齿状的"。

所以你想得到一个vector<vector<double>>指向位于索引 1 in vec .您可以通过以下方式做到这一点:

vector<vector<double>> * pmatrix = &vec[1];

但是,此指针将是一种不必要的尴尬访问方式 vector<vector<double>> .你肯定写不出喜欢:

double d = pmatrix[j][k];

并期望在"矩阵寻址"中的坐标 (j,k( 处获得double由一个pmatrix"。因为pmatrix是指向双精度向量的指针;所以pmatrix[j]指的是双精度向量(不是双精度向量(在索引 jpmatrix 开始,其中索引以 sizeof(vector<vector<double>>) .该声明将引用谁知道什么内存,很可能会使程序崩溃。

相反,您必须编写以下内容:

double d = (*pmatrix)[j][k];

其中(*pmatrix)给你由pmatrix寻址的向量双向量,或等效但更令人困惑:

double d = pmatrix[0][j][k];

更简单 - 因此,自然C++方式 - 是参考,而不是指针,指向索引 1 处的vector<vector<double>> vec .你只需通过以下方式做到这一点:

vector<vector<double>> & matrix = vec[1];

现在matrix只是vec中索引 1 处vector<vector<double>>的另一个名称,您可以像预期的那样按矩阵处理它(始终假设您已经确保它是一个矩阵,而不是一个交错数组(。

manu343726在评论中提出了另一件需要考虑的事情。是吗希望接收此引用的代码能够 vec[1]使用它来修改vec[1]的内容 - 这将包括更改其大小或其中任何vector<double>的大小?

如果您允许修改,那很好。如果你不这样做,那么你就想得到常量引用。您可以通过以下方式做到这一点:

vector<vector<double> > const & matrix = vec[1];

可能,您希望接收代码能够修改double但不是包含它们的矢量的大小?在这种情况下,std::vector 是应用程序的错误容器类型。如果这是你的立场,我可以更新此答案以提供替代容器。

考虑使用来自某个线性代数库的矩阵。这里有一些方向