Первая и самая большая вещь, которую вы делаете неправильно, - это написание такого кода вообще. То, что у вас есть выше, является написанным вручную эквивалентом:
std::for_each(mySet.begin(), mySet.end(), DoSomething);
Существует относительно немного действительно хороших применений итераторов вне реализации алгоритмов. Время от времени это разумно с картой или мультикартой (или unordered_ [multi] map), но это в основном компенсирует карту и мультикарту с использованием std :: pair, что не совсем замечательно.