多维数组实现

时间:2014-01-12 22:56:16

标签: c++ boost c++11 data-structures multidimensional-array

在搜索了一段时间后,我没有找到问题的答案,所以如果已经在其他地方已经回答,请提前道歉。

我正在寻找C ++中的多维数据结构,它不仅可以访问N维数组,还可以访问1维。

举一个例子假设一个简单的二维矩阵(它可以达到更高的维度,但在这种情况下,让我们坚持这个例子)。在大多数情况下,成员将以行列形式访问,例如矩阵[X] [Y]。在其他情况下,可能希望将所有成员作为单个列表访问,例如,使用std算法进行矩阵加法。

标准方法可能类似于std::array<std::array<double, 4>, 4>,并且另外编写一个迭代器,可以对所有成员进行线性访问,也可能是一个额外的访问函数。

第二种方法是std::array<double, 16>的另一种方式,其中访问器采用row-colum-form形式,但在这种情况下,返回整列是很棘手的。

或许它可以使用boost MultiArray,但我认为减少MultiArray的尺寸总是会导致只获得MultiArray的切片。

我的问题可归结为:标准库或某些知名库中是否已有实现,例如boost,为此?如果没有,我是否错过了一个观点,并且有一种比我写的更简单的方法?

编辑:我并不是只针对所有值进行迭代,就像上面提到的问题一样。但是从尖端文档中我可以发现MultiArray可以作为C风格的数组访问,这足以满足我的需求。然后可以关闭它并感谢所有答案

2 个答案:

答案 0 :(得分:1)

请参阅boost::multi_array::data()boost::multi_array::num_elements()

与std :: vector一样,看起来你可以通过索引将它作为一个固体内存块来访问,如果这就是你想要的。我从来没有这样做,但看起来你可以。只是因为你不一定意味着你应该,但是,好吧......

看到这个答案:

how to traverse a boost::multi_array

答案 1 :(得分:1)

您正在寻找的东西:std::valarray<T>。好吧,std::valarray<T>类模板的意图是在同一个数组上提供不同的视图,并支持可能的矢量化评估。也就是说,它并没有真正奏效,可能很少有人在使用它。

但是,根据您的描述,您可能希望在现有阵列上提供数组视图。我很确定这是之前实现的,如果没有别的东西可以替代std::valarray<T>,但我不能指出实现。