全部
我正在使用多维 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
有人有任何想法吗?我将非常感谢任何帮助!
问候
长
全部
我正在使用多维 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
其视为一个向量,其元素恰好是双向量的向量,而不是多维结构。
您可能知道,但以防万一您不提及,此数据类型不一定代表矩形 cuboid。
如果您确保所有向量在每个级别上的大小相同,vec
则只会具有该“形状” 。数据类型很高兴向量
与 at 的大小不同,同样也很高兴成为与 不同大小
的向量,因此您的结构是“锯齿状的”。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];
并期望double
在“由 a 寻址的矩阵”中获得坐标 (j,k) pmatrix
。因为pmatrix
是一个指向双向量向量的指针;所以pmatrix[j]
指的是来自的索引处的向量的双向量(不是双向量),其中索引的步长为
。该语句将引用谁知道什么内存并且很可能使您的程序崩溃。j
pmatrix
sizeof(vector<vector<double>>)
相反,您必须编写类似的内容:
double d = (*pmatrix)[j][k];
where(*pmatrix)
为您提供由或等效但更容易混淆的双向量向量: pmatrix
double d = pmatrix[0][j][k];
简单得多 - 因此,自然的 C++ 方式 - 是对at 索引 1 in获取引用,而不是指针。您只需通过以下方式做到这一点:vector<vector<double>>
vec
vector<vector<double>> & matrix = vec[1];
Nowmatrix
只是at index 1 in的另一个名称,您可以按矩阵方式处理它,就像您期望的那样(始终假设您已确定它是一个矩阵,而不是一个锯齿状数组)。vector<vector<double>>
vec
manu343726 在评论中提出了另一件需要考虑的事情。您是否希望接收此引用的代码vec[1]
能够使用它来修改其内容vec[1]
- 这将包括更改其大小或其中任何vector<double>
s 的大小?
如果你允许修改,那很好。如果你不这样做,那么你想获得一个const reference。您可以通过以下方式做到这一点:
vector<vector<double> > const & matrix = vec[1];
可能,您希望接收代码能够修改double
s 而不是包含它们的向量的大小?在这种情况下,std::vector
您的应用程序的容器类型是否错误。如果那是您的立场,我可以更新此答案以提供替代容器。
考虑使用一些线性代数库中的矩阵。这里有一些方向