Ознакомьтесь с этой статьей, в которой описано, как реализовать собственный виртуальный итератор для ваших классов: article
У него есть одно существенное преимущество - вы можете создать абстрактный базовый класс итераторов и наследовать его с помощью нескольких пользовательских итераторов для ваших собственных контейнеров и, возможно, для некоторых контейнеров STL. Таким образом, вы сможете использовать итераторы динамически - ваши функции будут использовать указатель на абстрактный класс итераторов, тогда как другой код сможет выбирать, какие контейнеры следует использовать.