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