【发布时间】: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 样式数组访问,这足以满足我的需要。然后可以关闭它并感谢所有答案
【问题讨论】:
-
我在 google 上找到了这个不错的博客,cpptruths.blogspot.com/2011/10/…
-
标准中应该没有这样的东西。您的选择是制定自己的解决方案,找到诸如 boost 之类的库,或者使用您提到的更简单的方法。
-
Setting pointer to arbitrary dimension array? 的回答可能对您有所帮助。
标签: c++ boost c++11 data-structures multidimensional-array