动态多维数组

时间:2013-08-11 02:52:53

标签: c++ arrays multidimensional-array

我必须使用类A作为元素创建一个三维数组,类A定义如下,我应该使用vector<vector<vector<A> > >还是boost::multi_array?哪一个更好?

struct C
{
    int C_1;
    short C_2;
};

class B
{
public:
    bool B_1;
    vector<C> C_;
};

class A
{
public:
    bool A_1;
    B B_[6];
};

2 个答案:

答案 0 :(得分:0)

我对使用vector<vector<vector<A> > >的主要担心是确保第二级和第三级向量都具有与传统3D数组相同的长度,因为没有任何内容要强制执行的数据类型。我对boost::multi_array并不十分熟悉,但看起来这不是一个问题 - 你可以resize()整个阵列,但除非我弄错了你可以& #39; t意外地从第三行中删除一个项目,并使其与所有其他行保持不同的大小(例如)。

因此,假设文件大小和编译时间等问题都不是问题,我认为您需要boost::multi_array。如果这些问题是一个问题,你可能会考虑使用一个普通的3D数组,因为在那些区域中应该击败其他两个选项。

答案 1 :(得分:0)

如果您知道当时所有三个维度的大小,您编写代码,如果您不需要检查数组边界,那么只需使用传统数组:

const int N1 = ...
const int N2 = ...
const int N3 = ...
A a[N1][N2][N3]

如果数组维度只能在运行时确定,但在程序初始化后保持不变,并且如果数组使用是均匀分布的,那么boost :: multi_array就是你的朋友。但是,如果在运行时进行大量动态扩展,和/或如果数组大小不均匀(例如,您需要A [0] [0] [0 ... 99]但只需要A [2] [ 3] [0 ... 3]),那么嵌套向量可能是最佳解决方案。在尺寸不均匀的情况下,将尺寸变化最大的尺寸作为最后尺寸。此外,在嵌套向量解决方案中,首先放置小尺寸通常是个好主意。