我实现了一个稀疏容器,一个基本的查找表(LUT)。
它基本上是vector<T>
和map<size_t, T>
之间的混合:
vector
一样)(我实际上如何实现这个容器是无关紧要的,所以我不会去那里。)
现在我正在尝试为它设计一个迭代器,但我一直试图弄清楚如何。
一方面,迭代器应该是随机访问的,因为容器本质上是稀疏的vector
,否则行为或多或少相同。
另一方面,假设每个槽的“默认”条目是可忽略的;也就是说,评估for_each(lut.begin(), lut.end(), func)
之类的内容以及 的内容是否必须跳过具有默认值的广告位(为了大幅加速)。
问题:
目前,我正在考虑实现它,使iterator::operator++
增加迭代器以指向下一个非默认条目,而iterator::operator+(d)
只是添加偏移量d
,无论是否该插槽的条目是否有效。所以“递增”不再意味着“加1”。
从表面上看,这听起来很荒谬 但我想不出更好的方法 有吗?
答案 0 :(得分:1)
您实际上是在描述两种不同类型的迭代器:一种在递增时跳过默认值,另一种不递增。
因此,似乎API应该只提供一种向容器用户呈现任何一种类型的方法,以便用户可以从迭代器中选择他们想要的行为。