Здесь есть две точки:
1) для любого типа Назначаемые, своп может быть определен в терминах задания. Это требует трех назначений, каждый из которых для типа контейнера является линейным по размеру контейнера. В некотором смысле, a.swap (b) является избыточным. Он существует исключительно ради эффективности: для многих контейнеров, таких как вектор и список, можно реализовать swap таким образом, чтобы его временная сложность была постоянной, а не линейной. Если это возможно для некоторого типа контейнера X, тогда обмен swap шаблона (X &, X &) можно просто записать в терминах X :: swap (X &). Следствием этого является то, что X :: swap (X &) должен быть определен только в том случае, если существует такая реализация с постоянным временем. Не каждый контейнерный класс X должен иметь такую функцию-член, но если функция-член существует вообще, то гарантируется, что будет амортизировано постоянное время.
2) если вам нужен другой контейнер, который имеет те же элементы, для которых вы хотели передать собственности Пожалуйста, создать простую копию для повышения эффективности
сторона примечание: «своп» уже упоминалось. Но я хотел бы добавить, что в C++ 0x вы можете просто заменить «OvertakeContents» на «std :: move», и он будет делать то, что вы хотите. – sellibitze