我现在用多维STL的vector存储用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的vector存储用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
就像它的元素恰好是 载体-的向量-的双,而不是作为一个多维结构的载体。
你可能知道,但只是万一你没有,我会提到它, 这个数据类型并不一定代表一个长方体。 vec
将只有那个“形状”,如果你确保所有的向量是 在每个级别相同的大小。该数据类型非常满意矢量vec[j]
与vec[k]
的大小不同,并且vec[j][n]
同样也是与vec[j][m]
不同的大小的矢量,因此您的结构“锯齿”。
所以你想得到一个指向vector<vector<double>>
的指针 索引1在vec
。你可以做到这一点:
vector<vector<double>> * pmatrix = &vec[1];
但是这个指针将访问该 vector<vector<double>>
的不必要的尴尬手段。你肯定不能写 喜欢的:
double d = pmatrix[j][k];
,并期望在坐标(J,K)获得double
“矩阵由pmatrix
解决 ”。因为pmatrix
是一个指向矢量的矢量指针; 所以什么pmatrix[j]
指从pmatrix
(未矢量的双) 在索引j
,其中索引进去的 sizeof(vector<vector<double>>)
步骤载体的双载体的最。该声明将引用谁知道什么 内存,并很可能导致您的程序崩溃。
相反,你必须写等:
double d = (*pmatrix)[j][k];
其中(*pmatrix)
给你的通过pmatrix
, 或等价,但更容易混淆的解决载体的双载体的-:
double d = pmatrix[0][j][k];
简单得多 - 因此,自然的C++方法 - 是采取参考, rathe r比指针,在vec
的索引1处的vector<vector<double>>
。您 做到这一点只需:
vector<vector<double>> & matrix = vec[1];
现在matrix
简直是为的vector<vector<double>>
索引1的另一个名字在vec
, ,你可以处理矩阵明智正如你所期望的(总假设 你已经确定它是矩阵,而不是锯齿阵列)。
需要考虑的另一件事是在manu343726的评论中提出的。你 希望接收该参考vec[1]
能够 用它来修改的vec[1]
内容的代码 - 这将包括改变其大小 或任何其内的vector<double>
S的尺寸是多少?
如果你允许修改,那很好。如果你不这样做,你想获得 a const参考。你可以做到这一点:
vector<vector<double> > const & matrix = vec[1];
可能的话,你要接收的代码才能够修改包含它们的载体的double
小号 但不是大小?在这种情况下,std::vector
是您的应用程序的错误容器类型。如果这是你的立场,我 可以更新这个答案,以提供替代容器。
考虑使用某些线性代数库中的矩阵。有一些方向here
为什么你需要这个指针?...如果你想迭代这个矩阵,你可以用'vec [i] [1] [j]'来实现...... –
关键问题是:你想做什么?请给我们更多的背景。 – Manu343726
嗨,@Manu343726我想做的是从函数返回一个大规模的矩阵。由于我的项目对速度性能有很高的要求。我必须返回指针而不是副本。 – ChangeMyName