稀疏的容器和迭代器

用户541686

我实现了一个稀疏容器,一个基本的查找表(LUT)。
它基本上是avector<T>和a的混合map<size_t, T>

  1. 容器是固定大小的(即,大小被指定为构造函数参数且不会更改)
  2. 逻辑上,每个插槽最初都是一些默认值(通常仅为零)
  3. 然后,调用方可以根据需要在任意插槽中读取或写入条目(就像使用一样vector
  4. 然后,调用方可以有效地枚举非默认条目

(我实际上如何实现此容器是无关紧要的,因此我不会去那里。)

现在,我正在尝试为其设计一个迭代器,但是我一直试图弄清楚如何做。

一方面,迭代器应该是随机访问的,因为容器本质上是稀疏的vector,否则其行为或多或少是相同的。

另一方面,每个插槽的“默认”条目被认为是可忽略的。就是说,打算评估类似for_each(lut.begin(), lut.end(), func)并且可以并且确实跳过具有默认值的插槽(以实现大幅提速)。

问题:

如何为此类正确设计迭代器?甚至有意义吗?

当前,我正在考虑实现它,iterator::operator++以使迭代器递增以指向下一个非默认条目,而iterator::operator+(d)仅添加偏移量,而d不管该插槽上的条目是否有效。因此,“递增”不再意味着“加1”。

从表面上看,这听起来很荒谬。
但是我想不出更好的方法。
有一个吗?

x

您实际上是在描述两种不同类型的迭代器:一种在递增时跳过默认值,另一种则不。

因此,似乎API应该只提供一种向容器用户呈现两种类型的方法,以便用户可以从迭代器中选择他们想要的行为。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章