std::list<T,Allocator>::splice
Von cppreference.com
| 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
[first, last) 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),
-
[first,last)ist kein gültiger Bereich in other, oder - pos befindet sich in
[first,last).
-
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
Führen Sie diesen Code aus
#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) | |
| entfernt Elemente, die bestimmte Kriterien erfüllen (public member function) |