我有一些C ++代码,我使用“vector”使用以下方法声明2D数组:
std::vector<std::vector<double>> Array2D(X, std::vector<double>Y);
其中X和Y是数组的维度。
这非常适合我需要实现的目标。 但是我想看一下3D,XYZ阵列使用相同的方法。 我假设我从:
开始 std::vector<std::vector<std::vector<double>>>
但是如何声明尺寸,即Array3D(X,?????)
答案 0 :(得分:5)
有 fill 向量构造函数,它构造一个包含n个元素的容器,每个元素都是提供的值的副本。
std::vector<std::vector<std::vector<double>>> Array3D(X, std::vector<std::vector<double>>(Y, std::vector<double>(Z)));
将通过Z向量创建X.您可能希望将typedef
用于此类型。
答案 1 :(得分:1)
您可以声明
std::vector<std::vector<std::vector<double> > > Array3D(X, std::vector<std::vector<double> >(Y, std::vector<double>(Z)));
其中X,Y,Z是3D矢量的维度。
<强> NB 强>
最好不要使用vsoftco
中提到的3D矢量请勿使用此类嵌套矢量来创建3D矩阵。它们很慢,因为内存不再保证是连续的,你会得到缓存未命中。更好地使用平面矢量并从3D到1D映射,反之亦然。