Namensräume
Varianten
Aktionen

std::list<T,Allocator>::swap

Von cppreference.com
< cpp‎ | container‎ | list
 
 
 
 
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 swap ausgetauscht. Andernfalls werden sie nicht ausgetauscht (und wenn get_allocator() != other.get_allocator(), ist das Verhalten undefiniert).

(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

#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) [edit]