通用C++多维迭代器

Laz*_*535 11 c++ algorithm iterator multidimensional-array

在我目前的项目中,我正在处理多维数据结构.基础文件是顺序存储的(即一个巨大的数组,没有矢量矢量).使用这些数据结构的算法需要知道各个维度的大小.

我想知道一个多维迭代器类是否已经以通用的方式在某个地方进行了定义,并且是否有任何标准或首选方法来解决这个问题.

目前我只是使用线性迭代器和一些额外的方法来返回每个维度的大小以及第一部分中有多少维度.我不喜欢它的原因是因为我不能以合理的方式使用std :: distance(即只返回整个结构的距离,而不是分别为每个维度).

在大多数情况下,我将以线性方式访问数据结构(第一维开始到结束 - >下一维+ ......等等),但知道一个维度"结束"的时候会很好.在这种方法中,我不知道如何使用运算符*(),运算符+()和运算符==()来执行此操作.

向量方法的向量是不受欢迎的,因为我不想拆分文件.此外,算法必须在具有不同维度的结构上运行,因此难以概括(或者可能有一种方法?).

Boost multi_array具有相同的问题(迭代器的多个"级别").

我希望这不是太模糊或抽象.任何暗示正确的方向将不胜感激.

我自己一直在寻找解决方案并重新访问boost :: multi_array.事实证明,可以使用它们生成关于数据的子视图,但同时也在顶层采用直接迭代器并且隐含地"平坦化"数据结构.然而,multi_array的实现版本不适合我的需要,因此我可能会自己实现一个(在后台处理文件的缓存),这与其他multi_arrays兼容.

实施完成后,我会再次更新它.

coi*_*oin 2

我刚刚决定在 Github 上打开一个公共存储库:MultiDim Grid,这可能会满足您的需求。这是一个正在进行的项目,所以如果您能尝试一下并告诉我您错过/需要什么,我会很高兴。

我已经开始在 codereview 上的这个主题上研究这个问题。

简单地说:

MultiDim Grid 提出了一种平面一维数组,它提供多维坐标和扁平索引之间的通用快速访问。

您将获得容器行为,以便可以访问迭代器。