The internal working of the containers is implementation independent, if the performance (Big-O) is correct and the preconditions and post-conditions of the container and his methods (ex: default constructed = empty container) are meet, the implementation is standard.
Example in VS:
1-vector of T - buffer (T[], T*). Normal internal representation is 3 pointer, begin and end of the buffer and current element.
2-deque of T - implemented in similar way to vector, but inserted element not need to be one after the other, because the container support inserting before and after with O(1) normally if you create deque it begin empty as all container, suppose a value is inserted from back, in this case is inserted in position 0, if a value is inserted from front is inserted in position capacity of deque (until the two index begin and end encounter, in this case grow is needed, and copy, like vector, and order of the value updated). Normal internal representation is pointer to begin and end of the buffer, first and last element of the deque.
3-list of T - double linked list (node with next, previous and T)
4-asociative of T (set, multiset, map, multimap) - Red Black Tree with value T or pair in case of maps like. Normal internal representation is left and right Node and value (used for sort)
5-unordered asociative of T (unordered_set, multiset ...): hash map implementation new in C++11.
6-Adaptor - the underlying representation is one of the previous containers (ex: stack is an adapter that is implemented by default with deque), in instantiation time one can change the underlying representation to tweak performance Big-O according to constrain (it may require Random Access, Forward, etc...).
This specifics can change in any version of the libraries, when any optimization is founded, and in any other case. For example some implementation of vector have pointer to begin, capacity (instead of end), and current element.