Implementing a list with a vector is misguided.
I'll explain. Containers are typically designed to achieve a certain set of goals, and the underlying implementation is selected based on those goals.
A vector is very good because it has contiguous memory and you can reach any cell by pointer arithmetic. Unfortunately, a vector has terrible performance when inserting or deleting an element in the center of the vector.
A list has the exact opposite intention. Navigating to a point in a list is time consuming because you have to follow links because its not contiguous. BUT the primary purpose of a list is to allow fast insertions, deletions, reordering, splicing, reversals, etc.
So, thinking of a vector as an implementation base for a list (while can be done) really isn't the way to look at this. Implementing a list with a vector would basically mean you didn't have any of the advantages that made you choose a list in the first place.
EDIT
As other people have pointed out in the comments below, if you're thinking of more complex implementations, you could definitely get performance benefits out of this.
For example, if you maintain a vector with references to all of the pointers, and you work to keep that reference vector in order, you can have the benefits of pointer-arithmetic access while still having relatively fast removal/insertion, etc. Also, since the reference vector just holds pointers to dynamically allocated objects, manipulating the reference vector isn't costly and you still don't have to have a massive region of contiguous memory being used (the vector would just be NumElements * sizeof(pointer) on your architecture).
You should look at a std::deque implementation for some fun. They have some interesting interplay between contiguous memory regions linked by pointers to speed up insert/delete/other operations.