Можно использовать собственное средство выделения для станд.:: вектор и имеет его, выделяют блоки Вашего стекового устройства хранения данных, подобного Вашему примеру. Класс средства выделения является второй частью шаблона.
Редактирование: я никогда не пробовал это, и рассмотрение документации далее приводит меня полагать, что Вы не можете записать свое собственное средство выделения. Я все еще изучаю его.
Проверить std :: swap
vector<T> v1;
// fill v1
vector<T> v2;
swap(v1, v2);
OR
v2.swap(v1);
std :: vector имеет функцию swap (), которая работает примерно так же.
vector<T> v2;
v2.swap(v1);
Здесь есть два момента:
1) Для любого присваиваемого типа своп может быть определен в терминах присваивания. Это требует трех назначений, каждое из которых для типа контейнера линейно по размеру контейнера. Таким образом, в некотором смысле a.swap (b) избыточен. Он существует исключительно ради эффективности: для многих контейнеров, таких как vector и list, можно реализовать своп таким образом, чтобы его сложность во время выполнения была постоянной, а не линейной. Если это возможно для некоторого типа контейнера X, тогда своп специализации шаблона (X &, X &) можно просто записать в терминах X :: swap (X &). Из этого следует, что X :: swap (X &) следует определять только в том случае, если существует такая реализация с постоянным временем. Не каждый контейнерный класс X должен иметь такую функцию-член, право собственности Создайте простую копию для большей эффективности