Не с итераторами вообще. Итератор не гарантированно сможет работать неразрушающе. Классическим примером является Итератор ввода, который фактически представляет основной входной поток.
Есть кое-что, что работает для такого рода итераторов. Forward Iterator не делает недействительными предыдущие копии самого себя, продвигаясь вперед по коллекции. Большинство итераторов (в том числе и для коллекций STL) являются по крайней мере прямыми итераторами, если не являются более функциональными входными итераторами только для версий или выходными итераторами, которые более ограничены. Таким образом, вы можете просто сделать копию своего итератора, увеличить его и проверить , что , а затем вернуться к исходному итератору.
Итак, ваш заглядывающий код:
set <int>::iterator dupe = iter;
++dupe;
// (do stuff with dupe)