Aquí hay dos puntos:
1) para cualquier tipo asignable, de intercambio se puede definir en términos de asignación. Esto requiere tres asignaciones, cada una de las cuales, para un tipo de contenedor, es lineal en el tamaño del contenedor. En cierto sentido, entonces, a.swap (b) es redundante. Existe únicamente por el bien de la eficiencia: para muchos contenedores, como el vector y la lista, es posible implementar el intercambio de manera que su complejidad en tiempo de ejecución sea constante en lugar de lineal. Si esto es posible para algún tipo de contenedor X, entonces el intercambio de especialización de plantilla (X &, X &) simplemente se puede escribir en términos de X :: swap (X &). La implicación de esto es que X :: swap (X &) solo se debe definir si existe una implementación de tiempo constante. No todos los contenedores clase X necesitan tener dicha función miembro, pero si la función miembro existe, entonces se garantiza que se amortizará a tiempo constante.
2) Si necesita otro contenedor que tiene los mismos elementos para los cuales se quiso trasladar la propiedad Por favor, cree una copia simple para una mejor eficiencia
nota al margen: "intercambio" ha sido ya mencionado. Pero me gustaría añadir que en C++ 0x simplemente puede reemplazar "OvertakeContents" por "std :: move" y hará lo que quiera. – sellibitze