No, gli elementi contenuti nel vector devono* essere consecutivi in memoria; un oggetto vector di fatto è (semplificando) una scatola contenente un puntatore alla memoria contigua allocata per gli elementi, un size_t contenente il numero di elementi effettivamente memorizzati e un size_t contenente il numero di elementi che può contenere la memoria allocata. Quando bisogna riallocare la memoria (perché è stato richiamato push_back, insert, ... e non è rimasto abbastanza spazio nella memoria allocata, o quando succede una situazione analoga con reserve) il vector alloca nuova memoria, copia il contenuto del vecchio array dinamico nella nuova memoria, lo dealloca e quindi memorizza nel suo puntatore interno l'indirizzo della nuova memoria.


* tu, si, proprio tu che stai per puntualizzare che nello standard C++98 ciò non è specificato, ma è specificato solo che l'accesso ad un elemento qualunque avviene in tempo costante, sì, proprio tu che stai anche per dire che in un TR è stato aggiunto anche questo requisito: ecco, come vedi lo so già e quindi non dirmelo.