我实现了一个稀疏容器,一个基本的查找表(LUT)。
它基本上是avector<T>
和a的混合体map<size_t, T>
:
vector
)(我实际上如何实现此容器是无关紧要的,因此我不会去那里。)
现在,我正在尝试为其设计一个迭代器,但是我一直试图弄清楚如何做。
一方面,迭代器应该是随机访问的,因为容器本质上是稀疏的vector
,否则其行为或多或少是相同的。
另一方面,每个插槽的“默认”条目被认为是可忽略的。就是说,打算评估类似for_each(lut.begin(), lut.end(), func)
并且可以并且确实跳过具有默认值的插槽(以实现大幅提速)。
问题:
当前,我正在考虑实现它,iterator::operator++
以使迭代器递增以指向下一个非默认条目,而iterator::operator+(d)
仅添加偏移量,而d
不管该插槽上的条目是否有效。因此,“递增”不再意味着“加1”。
从表面上看,这听起来很荒谬。
但是我想不出更好的方法。
有一个吗?
您实际上是在描述两种不同类型的迭代器:一种在递增时跳过默认值,另一种则不。
因此,似乎API应该只提供一种向容器用户呈现两种类型的方法,以便用户可以从迭代器中选择他们想要的行为。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句