Unfortunately, C++ containers generally cannot use realloc, because they are required to invoke their elements' move/copy constructors when their addresses change.
In that case, realloc will either
(1) grow the existing memory, perhaps default initialize it, and call it a day
(2) Or if growing the memory is not possible, (a) allocate a new region of memory, (b) memcpy the contents from the old block and (c) free the old block.
Perhaps I am missing something but I think those are all the guarantees that realloc is giving to you.