Namespaces
Variants

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

From cppreference.net

void swap ( vector & other ) ;
(bis C++17)
void swap ( vector & other ) noexcept ( /* siehe unten */ ) ;
(seit C++17)
(constexpr seit C++20)

Tauscht den Inhalt und die Kapazität des Containers mit denen von other . Führt keine Move-, Copy- oder Swap-Operationen auf einzelnen Elementen aus.

Alle Iteratoren und Referenzen bleiben gültig. Der end() Iterator wird ungültig.

Falls std:: allocator_traits < allocator_type > :: propagate_on_container_swap :: value true ist, werden die Allokatoren durch einen unqualifizierten Aufruf von non-member swap ausgetauscht. Andernfalls werden sie nicht getauscht (und falls get_allocator ( ) ! = other. get_allocator ( ) , ist das Verhalten undefiniert).

(seit C++11)

Inhaltsverzeichnis

Parameter

other - Container, mit dem die Inhalte ausgetauscht werden sollen

Ausnahmen

(keine)

(bis C++17)
noexcept Spezifikation:
noexcept ( std:: allocator_traits < Allocator > :: propagate_on_container_swap :: value
|| std:: allocator_traits < Allocator > :: is_always_equal :: value )
(seit C++17)

Komplexität

Konstante.

Beispiel

#include <iostream>
#include <vector>
template<class Os, class Co>
Os& operator<<(Os& os, const Co& co)
{
    os << '{';
    for (const auto& i : co)
        os << ' ' << i;
    return os << " } ";
}
int main()
{
    std::vector<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';
    // Beachten Sie, dass nach dem Swap die Iteratoren und Referenzen mit ihren
    // ursprünglichen Elementen verbunden bleiben, z.B. it1, das auf ein Element in 'a1' mit Wert 2
    // zeigte, zeigt weiterhin auf dasselbe Element, obwohl dieses Element in 'a2' verschoben wurde.
}

Ausgabe:

{ 1 2 3 } { 4 5 } 2 5 1 4
{ 4 5 } { 1 2 3 } 2 5 1 4

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 341 C++98 die Kapazitäten von std::vector konnten nicht getauscht werden sie werden ebenfalls getauscht

Siehe auch

spezialisiert den std::swap Algorithmus
(Funktions-Template)