Qui ci sono due punti:
1) Per qualsiasi tipo assegnabili, swap può essere definita in termini di assegnazione. Ciò richiede tre assegnazioni, ognuna delle quali, per un tipo di contenitore, è lineare nella dimensione del contenitore. In un certo senso, quindi, a.swap (b) è ridondante. Esiste solo per ragioni di efficienza: per molti contenitori, come il vettore e la lista, è possibile implementare lo swap in modo tale che la sua complessità di runtime sia costante anziché lineare. Se ciò è possibile per alcuni tipi di contenitore X, lo scambio di specializzazione del modello (X &) può essere semplicemente scritto in termini di X: swap (X &). L'implicazione di ciò è che X: swap (X &) deve essere definito solo se esiste un'implementazione a tempo costante. Non tutte le classi contenitore X hanno bisogno di una funzione membro di questo tipo, ma se la funzione membro esiste, allora è garantito che il tempo sia ammortizzato.
2) Se avete bisogno di un altro contenitore che ha stessi elementi di cui si voleva trasferire la proprietà Si prega di creare un semplice copia per una migliore efficienza
nota a margine: "swap" è stato menzionato già. Ma vorrei aggiungere che in C++ 0x puoi semplicemente sostituire "OvertakeContents" con "std :: move" e farà ciò che vuoi. – sellibitze