Hier gibt es zwei Punkte:
1) Für jede zuweisbare Typ, tauschen können in Bezug auf die Zuordnung definiert werden. Dies erfordert drei Zuweisungen, von denen jede für einen Containertyp in der Containergröße linear ist. In gewisser Hinsicht ist a.swap (b) überflüssig. Es existiert nur aus Gründen der Effizienz: für viele Container, wie Vektor und Liste, ist es möglich, Swap so zu implementieren, dass seine Laufzeitkomplexität eher konstant als linear ist. Wenn dies für einige Container-Typ X möglich ist, dann ist die Template-Spezialisierung swap (X &, X &) einfach in Bezug auf die X :: Swap geschrieben werden (X &). Die Implikation davon ist, dass X :: swap (X &) nur definiert werden sollte, wenn eine solche Konstantenzeit-Implementierung existiert. Nicht jede Containerklasse X muss eine solche Memberfunktion haben, aber wenn die Memberfunktion überhaupt existiert, ist garantiert, dass sie konstante Zeit amortisiert.
2), wenn Sie einen anderen Container müssen die gleichen Elemente, für die hat Sie Eigentum Bitte erstellen Sie eine einfache Kopie für eine bessere Effizienz
Randnotiz übertragen wollte: „swap“ wurde bereits erwähnt. Aber ich möchte hinzufügen, dass Sie in C++ 0x einfach "OvertakeContents" durch "std :: move" ersetzen können und es wird tun, was Sie wollen. – sellibitze