Well the students of my class seems quite unable to explain to me when it is more effective to use vectors, but they look quite happy when advising me to use lists.
This is how I understand it
Lists:
Each item contains an address to the next or previous element, so with this feature, you can randomize the items, even if they aren't sorted, the order won't change: it's efficient if you memory is fragmented.
But it also has an other very big advantage: you can easily insert/remove items, because the only thing you need to do is change some pointers.
Drawback:
To read a random single item, you have to jump from one item to another until you find the correct address.
Vectors:
When using vectors, the memory is much more organized like regular arrays: each n-th items is stored just after (n-1)th item and before (n+1)th item.
Why is it better than list ?
Because it allow fast random access.
Here is how: if you know the size of an item in a vector, and if they are contiguous in memory, you can easily predict where the n-th item is; you don't have to browse all the item of a list to read the one you want, with vector, you directly read it, with a list you can't.
On the other hand, modify the vector array or change a value is much more slow.
Lists are more appropriate to keep track of objects which can be added/removed in memory.
Vectors are more appropriate when you want to access an element from a big quantity of single items.
I don't know how lists are optimized, but you have to know that if you want fast read access, you should use vectors, because how good the STL fasten lists, it won't be as fast in read-access than vector.