Namensräume
Varianten
Aktionen

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

Von cppreference.com
< cpp‎ | container‎ | list
 
 
 
 
void splice( const_iterator pos, list& other );
(1)
void splice( const_iterator pos, list&& other );
(2) (seit C++11)
void splice( const_iterator pos, list& other, const_iterator it );
(3)
void splice( const_iterator pos, list&& other, const_iterator it );
(4) (seit C++11)
void splice( const_iterator pos, list& other,
             const_iterator first, const_iterator last);
(5)
void splice( const_iterator pos, list&& other,
             const_iterator first, const_iterator last );
(6) (seit C++11)

Überträgt Elemente von einer Liste in eine andere.

Es werden keine Elemente kopiert oder verschoben, nur die internen Zeiger der Listenknoten werden neu gerichtet. Keine Iteratoren oder Referenzen werden ungültig, die Iteratoren zu verschobenen Elementen bleiben gültig, verweisen aber nun auf *this und nicht auf other.

1,2) Überträgt alle Elemente aus other in *this. Die Elemente werden vor dem Element eingefügt, auf das pos zeigt. Der Container other ist nach der Operation leer.
3,4) Überträgt das Element, auf das it zeigt, von other in *this. Das Element wird vor dem Element eingefügt, auf das pos zeigt.
5,6) Überträgt die Elemente im Bereich [firstlast) von other in *this. Die Elemente werden vor dem Element eingefügt, auf das pos zeigt.

Das Verhalten ist undefiniert, wenn

  • get_allocator() != other.get_allocator(),
  • für Überladungen (1,2), *this und other verweisen auf dasselbe Objekt,
  • für Überladungen (3,4), it ist kein dereferenzierbarer Iterator in other, oder
  • für Überladungen (5,6),
  • [firstlast) ist kein gültiger Bereich in other, oder
  • pos befindet sich in [firstlast).

Inhalt

[edit] Parameter

pos - Element, vor dem der Inhalt eingefügt werden soll
Sonstiges - Ein anderer Container, aus dem der Inhalt übertragen werden soll
it - Das Element, das von other nach *this übertragen werden soll
first, last - Das Iterator-Paar, das den Bereich der Elemente definiert, die von other nach *this übertragen werden sollen

[edit] Rückgabewert

(keine)

[edit] Ausnahmen

Wirft nichts.

[edit] Komplexität

1-4) Konstante Zeit.
5,6) Konstante Zeit, wenn other auf dasselbe Objekt wie *this verweist, andernfalls linear in std::distance(first, last).

[edit] Beispiel

#include <iostream>
#include <list>
 
std::ostream& operator<<(std::ostream& ostr, const std::list<int>& list)
{
    for (auto& i : list)
        ostr << ' ' << i;
 
    return ostr;
}
 
int main ()
{
    std::list<int> list1{1, 2, 3, 4, 5};
    std::list<int> list2{10, 20, 30, 40, 50};
 
    auto it = list1.begin();
    std::advance(it, 2);
 
    list1.splice(it, list2);
 
    std::cout << "list1:" << list1 << '\n';
    std::cout << "list2:" << list2 << '\n';
 
    list2.splice(list2.begin(), list1, it, list1.end());
 
    std::cout << "list1:" << list1 << '\n';
    std::cout << "list2:" << list2 << '\n';
}

Ausgabe

list1: 1 2 10 20 30 40 50 3 4 5
list2:
list1: 1 2 10 20 30 40 50
list2: 3 4 5

[edit] Fehlerberichte

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

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 250 C++98 Referenzen und Iteratoren auf die verschobenen
Elemente wurden alle ungültig
Sie verweisen auf die
selben Elemente in *this
N2525 C++98 O(1)-Splicing konnte nicht garantiert werden, wenn
get_allocator() != other.get_allocator()
Das Verhalten ist
in diesem Fall nicht definiert.

[edit] Siehe auch

fügt zwei sortierte Listen zusammen
(public member function) [edit]
entfernt Elemente, die bestimmte Kriterien erfüllen
(public member function) [edit]