在我当前的项目中,我正在处理多维数据结构。
底层文件按顺序存储(即一个巨大的数组,没有向量的向量)。
使用这些数据结构的算法需要知道各个维度的大小。
我想知道是否已在某处以通用方式定义了多维迭代器类,以及是否有任何标准或首选方法来解决此问题。
目前,我只是使用线性迭代器和一些附加方法,这些方法返回每个维度的大小以及第一部分中有多少个维度。我不喜欢它的原因是因为我无法以合理的方式使用 std::distance (即仅返回整个结构的距离,而不是单独返回每个维度)。
在大多数情况下,我将以线性方式访问数据结构(第一个维度开始到结束 -> 下一个维度+...等等),但最好知道一个维度何时“结束”。我不知道如何在这种方法中仅使用operator*()、operator+() 和operator==() 来做到这一点。
向量的向量方法不受欢迎,因为我不想分割文件。此外,算法必须在不同维度的结构上运行,因此很难概括(或者也许有办法?)。
Boost multi_array 也有同样的问题(迭代器的多个“级别”)。
我希望这不是太模糊或抽象。任何正确方向的提示将不胜感激。
我自己再次寻找解决方案并重新访问了 boost:: multi_array 。事实证明,可以用它们生成数据的子视图,但同时也可以在顶层采用直接迭代器并隐式“展平”数据结构。然而,multi_array 的实现版本不适合我的需要,因此我可能会自己实现一个与其他 multi_array 兼容的版本(在后台处理文件的缓存)。
实施完成后我会再次更新。
我刚刚决定在 Github 上打开一个公共存储库:多维网格 https://github.com/coin-au-carre/MultiDimGrid这可能有助于满足您的需求。这是一个正在进行的项目,因此
如果您能尝试一下并告诉我您错过/需要什么,我会很高兴。
我已经开始研究这个了topic https://codereview.stackexchange.com/questions/97260/generic-multi-dimension-grid-array-class-in-c关于代码审查。
简单地说:
MultiDim Grid 提出了一种平面一维数组,它提供了
多维坐标和展平之间的通用快速访问
指数。
您将获得容器行为,以便可以访问迭代器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)