0

全部

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

有人有任何想法吗?我将非常感谢任何帮助!

问候

4

2 回答 2

1

最好将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]指的是来自的索引处的向量的双向量(不是双向量),其中索引的步长为 。该语句将引用谁知道什么内存并且很可能使您的程序崩溃。jpmatrixsizeof(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];

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

于 2013-08-03T19:41:57.017 回答
0

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

于 2013-08-03T22:10:31.400 回答