La spiegazione è molto semplice. Quando si usano iteratori, il container che li mette a disposizione non conta più.
Funzionerebbe anche se al posto di vector<string> usassi una string.

codice:
   string test("ciao");
   string::iterator i;

   for( ... )