Владение передачи в контейнерах STL?

Можно использовать собственное средство выделения для станд.:: вектор и имеет его, выделяют блоки Вашего стекового устройства хранения данных, подобного Вашему примеру. Класс средства выделения является второй частью шаблона.

Редактирование: я никогда не пробовал это, и рассмотрение документации далее приводит меня полагать, что Вы не можете записать свое собственное средство выделения. Я все еще изучаю его.

5
задан luke 23 September 2009 в 15:16
поделиться

3 ответа

Проверить std :: swap

vector<T> v1; 
// fill v1

vector<T> v2;

swap(v1, v2);
OR
v2.swap(v1);

Ссылка на обмен

10
ответ дан 18 December 2019 в 07:55
поделиться

std :: vector имеет функцию swap (), которая работает примерно так же.

vector<T> v2;
v2.swap(v1);
10
ответ дан 18 December 2019 в 07:55
поделиться

Здесь есть два момента:

1) Для любого присваиваемого типа своп может быть определен в терминах присваивания. Это требует трех назначений, каждое из которых для типа контейнера линейно по размеру контейнера. Таким образом, в некотором смысле a.swap (b) избыточен. Он существует исключительно ради эффективности: для многих контейнеров, таких как vector и list, можно реализовать своп таким образом, чтобы его сложность во время выполнения была постоянной, а не линейной. Если это возможно для некоторого типа контейнера X, тогда своп специализации шаблона (X &, X &) можно просто записать в терминах X :: swap (X &). Из этого следует, что X :: swap (X &) следует определять только в том случае, если существует такая реализация с постоянным временем. Не каждый контейнерный класс X должен иметь такую ​​функцию-член, право собственности Создайте простую копию для большей эффективности

0
ответ дан 18 December 2019 в 07:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: