所有
我正在使用多维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
任何人都有这样的想法吗?我会非常感谢任何帮助!
此致
长
答案 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)处获得pmatrix
由pmatrix
“。因为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