全部
我正在使用多维 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/