Это использование operator+
предоставляется только для итераторов с произвольным доступом. set
итераторы являются двунаправленными итераторами.
Но функцию std::advance
можно использовать для перемещения любого итератора на определенное количество мест:
#include <iterator>
//...
set<int>::iterator i_visited = visited.begin();
for ( std::advance(i_visited, visited_pointer)
; i_visited!=visited.end()
; ++i_visited
)