If your code depends on the iterator being a vector iterator you should probably just iterate over it using an index, achieves the same thing with much less of a hassle. The primary use for iterators is writing collection agnostic code (actually, it even abstracts from the fact that there is a collection).
There really aren't any dependencies that you'd need to avoid when you're already set on using a vector. I'm not even sure if distance works when '-' doesn't.
> As I understand you was speaking about std::distance( seq.begin(), iterator ) before.
> But now you have started to speak about seq[position].
Speaking about std::distance( seq.begin(), iterator ) and ignoring the superficially inconvenient seq[position] doesn't change anything.
If the terator is not a random access iterator, std::distance( seq.begin(), iterator ) is O(N), doing it in a loop that executes O(N) times still makes it O(N2) or quadratic.
I already said that many standard algorithms which deal with forward or bidirectional iterators uses std::distance. Even where random access iterators is used this function are applied. I advice to look through realizations of the standard algorithms. if you do not understand why this function is used it does not mean that it shall not be used.