【问题标题】:Multidimensional Array Implementation [duplicate]多维数组实现
【发布时间】:2014-01-31 14:44:11
【问题描述】:

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

我正在寻找一种 C++ 中的多维数据结构,它不仅允许以 N 维数组的形式访问,而且还允许以一维的形式访问。

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

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

第二种方法是 std::array<double, 16> 的另一种方法,使用行列形式的访问器,但在这种情况下,返回整列会变得很棘手。

或者也许使用 boost MultiArray 是可行的,但我认为减少 MultiArray 的维度总是会导致只获得 MultiArray 的切片。

我的问题归结为:标准库或某些知名库(如 boost)中是否已经有实现?如果没有,我是否遗漏了一点,还有比我写的更简单的方法吗?

编辑:我不是在寻找所有值的迭代,就像在提到的问题中一样。但是,从有针对性的文档中,我可以发现 MultiArray 可以作为 C 样式数组访问,这足以满足我的需要。然后可以关闭它并感谢所有答案

【问题讨论】:

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


【解决方案1】:

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

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

看到这个答案:

how to traverse a boost::multi_array

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      • 2012-11-17
      • 2016-09-29
      • 1970-01-01
      相关资源
      最近更新 更多