2013-08-02 40 views
0

所有如何获得多维向量的尺寸C++

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

任何人有任何想法,这样做呢?我会非常感谢任何帮助!

问候

+1

为什么你需要这个指针?...如果你想迭代这个矩阵,你可以用'vec [i] [1] [j]'来实现...... –

+0

关键问题是:你想做什么?请给我们更多的背景。 – Manu343726

+0

嗨,@Manu343726我想做的是从函数返回一个大规模的矩阵。由于我的项目对速度性能有很高的要求。我必须返回指针而不是副本。 – ChangeMyName

回答

1

最好是考虑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 是您的应用程序的错误容器类型。如果这是你的立场,我 可以更新这个答案,以提供替代容器。

0

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