У вас есть быстрый вопрос о том, как лучше всего реализовать итераторы в следующем:
Скажем, у меня есть шаблонный базовый класс «Список» и два подкласса «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.
Любые мысли о лучшем дизайне, чтобы обойти эти проблемы?
std::advance? - person kennytm   schedule 07.06.2010std::advance()) и итератором с произвольным доступом заключается в том, что прямой итератор не имеет эффективной реализацииoperator+(вспомните связанный список). Этот вопрос подразумевает итератор, который имеет статический произвольный доступ, но имеет динамическое поведение для этого доступа. - person Simon Buchan   schedule 07.06.2010