tutaj dwa punkty:
1) dla każdego typu przypisywany wymiany może być zdefiniowana w odniesieniu do przeniesienia. Wymaga to trzech przydziałów, z których każdy dla typu kontenera jest liniowy w rozmiarze kontenera. W pewnym sensie, a.swap (b) jest zbędny. Istnieje tylko ze względu na wydajność: w przypadku wielu kontenerów, takich jak wektor i lista, możliwe jest zaimplementowanie zamiany w taki sposób, że jej złożoność w czasie wykonywania jest stała, a nie liniowa. Jeśli jest to możliwe dla jakiegoś kontenera typu X, to zamiana specjalizacji szablonów (X &, X &) może być po prostu zapisana pod względem X :: swap (X &). Implikacją tego jest to, że X :: swap (X &) powinien być zdefiniowany tylko wtedy, gdy istnieje taka implementacja o stałej długości czasu. Nie każda klasa kontenerowa X musi mieć taką funkcję składową, ale jeśli funkcja składowa istnieje w ogóle, wówczas gwarantuje się, że będzie ona amortyzowana stałym czasem.
2) Jeśli potrzebujesz inny pojemnik, który ma te same elementy, dla których chcieli przenieść własności Proszę utworzyć prostą kopię dla lepszej wydajności
marginesie: „Swap” zostało już wspomniane. Ale chciałbym dodać, że w C++ 0x możesz po prostu zamienić "OvertakeContents" na "std :: move" i zrobi to, co chcesz. – sellibitze