Мне интересно, можно ли было бы реализовать stl-подобный вектор, где хранение осуществляется в блоках, и вместо того, чтобы выделять больший блок и копировать из исходного блока, вы могли бы хранить разные блоки в разных местах,и перегружаем оператор [] и оператор итератора ++, чтобы пользователь вектора не знал, что блоки не являются смежными.
Это может сохранить копию при выходе за пределы существующей емкости.