c++ - 如何在 C++ 中获取多维 vector 的维度

标签 c++ vector matrix stl multidimensional-array

全部

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

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

我想从中检索的是:

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

有人知道这样做吗?如果有任何帮助,我将不胜感激!

问候

最佳答案

最好考虑vec就像一个 vector ,其元素恰好是 vectors-of-vectors-of-double,而不是多维结构。

您可能知道,但只是以防万一您不知道,我会提一下, 此数据类型不一定表示矩形立方体vec如果确保所有 vector 都是 每个级别的大小相同。数据类型非常适合 vector vec[j]vec[k] 中的尺码不同同样适用于 vec[j][n] 是与 vec[j][m] 不同大小的 vector , 所以你的结构是“参差不齐”的。

所以你想得到一个指向vector<vector<double>>的指针那是在 vec 中的索引 1 .您可以通过以下方式做到这一点:

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

然而,这个指针将是一种不必要的笨拙的访问方式 vector<vector<double>> .你肯定不能写 喜欢:

double d = pmatrix[j][k];

并期望得到 double在“矩阵寻址”中的坐标 (j,k) 通过 pmatrix "。因为 pmatrix 是指向 double vector 的指针; 那又怎样pmatrix[j]指的是vector-of-vector-of-double(不是vector-of-double) 在索引 j来自 pmatrix ,其中索引按以下步骤进行 sizeof(vector<vector<double>>) .该声明将引用谁知道什么 内存,很可能使您的程序崩溃。

相反,你必须这样写:

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

哪里(*pmatrix)为您提供 double vector 的 vector pmatrix , 或等效但更令人困惑:

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

更简单 - 因此,自然的 C++ 方式 - 是采用引用, 而不是指向 vector<vector<double>> 的指针在 vec 中的索引 1 .你 只需通过以下方式即可:

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

现在matrix只是 vector<vector<double>>另一个名字vec 中的索引 1 , 你可以像你期望的那样按矩阵方式处理它(总是假设 您已确定它矩阵,而不是锯齿状数组)。

manu343726 在评论中提出了另一件需要考虑的事情。你 想要接收此引用的代码 vec[1]有能力去 用它来修改vec[1]的内容- 这将包括改变其 尺寸或任何 vector<double> 的尺寸在里面吗?

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

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

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

关于c++ - 如何在 C++ 中获取多维 vector 的维度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18014968/

相关文章:

c++ - 默认参数和空列表初始化

c++ - 划分集合 (C++)

c++ - 如何创建另一个类结构的 vector ? (C++ 11)

c++ - 当我已经对我的文件进行标记后,如何创建倒排索引?

c++ - int和bool不一致

c++ - 旋转矩阵的方向 vector

c# - 如何将 3x2 矩阵转换为 4x4 矩阵?

c++ - 对于巨大的稀疏对称矩阵,哪个是 Spectra 库中最快的特征值求解器?

python - symPy 中的 inv() 没有返回正确的值

c++ - 是否可以在不向函数传递参数的情况下获取函数的返回类型?