Note that the usually implementation of vector won't use an "int" as the type of the index/size. So you're code will at the very least provoke compiler warnings.
Genericity
Iterators increase the genericity of your code.
For example:
typedef std::vector<int> Container ;
void doSomething(Container & p_aC)
{
for(Container::iterator it = p_aC.begin(), itEnd = p_aC.end(); it != itEnd; ++it)
{
int & i = *it ; // i is now a reference to the value iterated
// do something with "i"
}
}
Now, let's imagine you change the vector into a list (because in your case, the list is now better). You only need to change the typedef declaration, and recompile the code.
Should you have used your code instead, it would have needed to be re-written.
Access
The iterator should be viewed like a kind of super pointer.
It "points" to the value (or, in case of maps, to the pair of key/values).
But it has methods to move to the next item in the container. Or the previous. Some containers offer even random access (the vector and the deque).
Algorithms
Most STL algorithms work on iterators or on ranges of iterators (again, because of genericity). You won't be able to use an index, here.