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

时间:2013-08-02 10:42:20

标签: c++ vector matrix stl multidimensional-array

所有

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

任何人都有这样的想法吗?我会非常感谢任何帮助!

此致

2 个答案:

答案 0 :(得分:1)

最好将vec视为一个元素碰巧的向量 双向矢量,而不是多维结构。

你可能知道,但只是如果你不这样做,我会提到它, 此数据类型不一定代表矩形长方体。 如果确保所有的向量都是vec,那么vec[j]只会有“形状” 每个级别的大小相同。数据类型对向量vec[k]非常满意 与vec[j][n]的大小不同,vec[j][m]同样大小 是vector<vector<double>>的不同大小的向量,因此你的结构是“锯齿状的”。

所以你想得到一个指向vec的指针 vector<vector<double>> * pmatrix = &vec[1]; 中的索引1。你可以通过以下方式做到:

vector<vector<double>>

然而,这个指针将是访问它的不必要的尴尬手段 double d = pmatrix[j][k]; 。你当然不会写 喜欢:

double

并期望在“矩阵寻址中的坐标(j,k)处获得pmatrixpmatrix“。因为pmatrix[j]是指向双向量的向量; 那么j所指的是双向量矢量(不是双向量) 来自pmatrix的索引sizeof(vector<vector<double>>),索引的步骤为。{1}} double d = (*pmatrix)[j][k]; 。该声明将引用谁知道什么 记忆,很可能会破坏你的程序。

相反,你必须写出:

(*pmatrix)

其中pmatrix为您提供了 {/ 1>}所解决的双向量矢量, 或等同但更容易混淆:

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

更简单 - 因此,自然的C ++方式 - 是采用引用, 而不是指针,指向vector<vector<double>>中索引1处的vec。您 只需这样做:

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

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

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

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

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

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

答案 1 :(得分:0)

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