std::list<T,Allocator>::swap
Von cppreference.com
void swap( list& other ); |
(bis C++17) | |
| void swap( list& other ) noexcept(/* siehe unten */); |
(seit C++17) | |
Tauscht den Inhalt des Containers mit dem von other aus. Ruft keine Bewegungs-, Kopier- oder Tauschoperationen für einzelne Elemente auf.
Alle Iteratoren und Referenzen bleiben gültig. Es ist nicht spezifiziert, ob ein Iterator, der den Wert von end() in diesem Container hält, nach der Operation auf diesen oder den anderen Container verweist.
|
Wenn std::allocator_traits<allocator_type>::propagate_on_container_swap::value true ist, werden die Allocatoren durch einen nicht qualifizierten Aufruf von non-member |
(seit C++11) |
Inhalt |
[bearbeiten] Parameter
| Sonstiges | - | Container, mit dem die Inhalte ausgetauscht werden sollen |
[bearbeiten] Ausnahmen
|
(keine) |
(bis C++17) |
|
noexcept-Spezifikation:
noexcept(std::allocator_traits<Allocator>::is_always_equal::value) |
(seit C++17) |
[bearbeiten] Komplexität
Konstant.
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <iostream> #include <list> template<class Os, class Co> Os& operator<<(Os& os, const Co& co) { os << '{'; for (auto const& i : co) os << ' ' << i; return os << " } "; } int main() { std::list<int> a1{1, 2, 3}, a2{4, 5}; auto it1 = std::next(a1.begin()); auto it2 = std::next(a2.begin()); int& ref1 = a1.front(); int& ref2 = a2.front(); std::cout << a1 << a2 << *it1 << ' ' << *it2 << ' ' << ref1 << ' ' << ref2 << '\n'; a1.swap(a2); std::cout << a1 << a2 << *it1 << ' ' << *it2 << ' ' << ref1 << ' ' << ref2 << '\n'; // Note that after swap the iterators and references stay associated with their // original elements, e.g. it1 that pointed to an element in 'a1' with value 2 // still points to the same element, though this element was moved into 'a2'. }
Ausgabe
{ 1 2 3 } { 4 5 } 2 5 1 4
{ 4 5 } { 1 2 3 } 2 5 1 4[bearbeiten] Siehe auch
| spezialisiert den Algorithmus std::swap (function template) |