有什么是执行下面的迭代器的最好办法一个简单的问题:C++迭代器和继承
说我有一个模板化基类“目录”和两个子类“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。我通过使用包含ListIterator的包装器来解决这个问题,该包装器包含一个ListIteratorImpl指针,该指针包含ListIteratorImpl2和ListIteratorImpl2子类,但这一切都变得非常混乱,尤其是当您需要在ListIterator中实现operator +时。
有关更好的设计来解决这些问题的任何想法?
为什么不使用['std :: advance'](http://www.cplusplus.com/reference/std/iterator/advance/)? – kennytm 2010-06-07 12:02:56
谢谢,但说我需要我提供一个更高效的操作符+而不是仅仅重复使用operator ++。据推测我仍然有同样的问题? – user360366 2010-06-07 12:11:24
前向迭代器('std :: advance()'用于)和随机访问迭代器之间的区别在于前向迭代器没有有效的“操作符+”实现(思考链表)。这个问题意味着一个静态随机访问的迭代器,但它具有访问的动态行为。 – 2010-06-07 12:42:55