关于以下实现迭代器的最佳方法,我有一个快速问题:
假设我有一个模板基类'List'和两个子类"ListImpl1"和"ListImpl2"。基类的基本要求是可迭代的,也就是说我可以这样做:
for(List<T>::iterator it = list->begin(); it != list->end(); it++){
...
}
我也想允许迭代器加法操作,例如:
for(List<T>::iterator it = list->begin()+5; it != list->end(); it++){
...
}
问题在于ListImpl1的迭代器实现与ListImpl2的不同。我通过使用一个包含指向ListIteratorImpl的指针的包装器ListIterator来解决这个问题,其中有子类ListIteratorImpl2和ListIteratorImpl2,但是这一切变得非常混乱,特别是当你需要在ListIterator中实现operator+时。
有没有更好的设计来解决这些问题?
std::advance
? - kennytmstd::advance()
的作用)和随机访问迭代器之间的区别在于前向迭代器没有高效的operator+
实现(想想链表)。这个问题暗示了一个迭代器是静态随机访问,但其具有动态行为以进行访问。 - Simon Buchan