std::forward_list<T,Allocator>::splice_after
Von cppreference.com
< cpp | container | forward list
| void splice_after( const_iterator pos, forward_list& other ); |
(1) | (seit C++11) |
| void splice_after( const_iterator pos, forward_list&& other ); |
(2) | (seit C++11) |
| void splice_after( const_iterator pos, forward_list& other, const_iterator it ); |
(3) | (seit C++11) |
| void splice_after( const_iterator pos, forward_list&& other, const_iterator it ); |
(4) | (seit C++11) |
| void splice_after( const_iterator pos, forward_list& other, const_iterator first, const_iterator last ); |
(5) | (seit C++11) |
| void splice_after( const_iterator pos, forward_list&& other, const_iterator first, const_iterator last ); |
(6) | (seit C++11) |
Verschiebt Elemente aus einer anderen forward_list nach *this. Die Elemente werden nach dem von pos bezeichneten Element eingefügt.
Es werden keine Elemente kopiert. Keine Iteratoren oder Referenzen werden ungültig. Die Iteratoren zu den verschobenen Elementen verweisen nun auf *this, nicht auf other.
1,2) Verschiebt alle Elemente von other nach *this. Der Container other wird nach der Operation leer.
3,4) Verschiebt das Element, das auf den Iterator nach it folgt, von other nach *this. Hat keine Auswirkung, wenn pos == it oder wenn pos == ++it.
5,6) Verschiebt die Elemente im Bereich
(first, last) von other nach *this. Das von first bezeichnete Element wird nicht verschoben.Das Verhalten ist undefiniert, wenn
- get_allocator() != other.get_allocator(),
- pos ist weder before_begin() noch ein dereferenzierbarer Iterator im Bereich
[begin(),end()), - für Überladungen (1,2), *this und other bezeichnen dasselbe Objekt,
- für Überladungen (3,4), ist der Iterator nach it kein dereferenzierbarer Iterator in other, oder
- für Überladungen (5,6),
-
(first,last)ist kein gültiger Bereich in other, - einige Iteratoren in
(first,last)sind nicht dereferenzierbar, oder - pos befindet sich in
(first,last).
-
Inhalt |
[edit] Parameter
| pos | - | Element, nach dem der Inhalt eingefügt werden soll |
| Sonstiges | - | Ein anderer Container, aus dem der Inhalt verschoben werden soll |
| it | - | Iterator, der dem zu verschiebenden Element aus other nach *this vorangeht |
| first, last | - | Das Paar von Iteratoren, das den Bereich der zu verschiebenden Elemente aus other nach *this definiert |
[edit] Ausnahmen
Wirft nichts.
[edit] Komplexität
1,2) Linear bezüglich der Größe von other.
3,4) Konstant.
5,6) Linear bezüglich std::distance(first, last).
[edit] Beispiel
Führen Sie diesen Code aus
#include <cassert> #include <forward_list> int main() { using F = std::forward_list<int>; // Demonstrate the meaning of open range (first, last) // in overload (5): the first element of l1 is not moved. F l1 = {1, 2, 3, 4, 5}; F l2 = {10, 11, 12}; l2.splice_after(l2.cbegin(), l1, l1.cbegin(), l1.cend()); // Not equivalent to l2.splice_after(l2.cbegin(), l1); // which is equivalent to // l2.splice_after(l2.cbegin(), l1, l1.cbefore_begin(), l1.end()); assert((l1 == F{1})); assert((l2 == F{10, 2, 3, 4, 5, 11, 12})); // Overload (1) F x = {1, 2, 3, 4, 5}; F y = {10, 11, 12}; x.splice_after(x.cbegin(), y); assert((x == F{1, 10, 11, 12, 2, 3, 4, 5})); assert((y == F{})); // Overload (3) x = {1, 2, 3, 4, 5}; y = {10, 11, 12}; x.splice_after(x.cbegin(), y, y.cbegin()); assert((x == F{1, 11, 2, 3, 4, 5})); assert((y == F{10, 12})); // Overload (5) x = {1, 2, 3, 4, 5}; y = {10, 11, 12}; x.splice_after(x.cbegin(), y, y.cbegin(), y.cend()); assert((x == F{1, 11, 12, 2, 3, 4, 5})); assert((y == F{10})); }
[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 2045 | C++11 | O(1) Splicing konnte nicht garantiert werden, wenn get_allocator() != other.get_allocator() |
Das Verhalten ist in diesem Fall nicht definiert. |
| LWG 2222 | C++11 | das von it bezeichnete Element nicht verschoben wird, aber Zeiger, Referenzen und Iteratoren, die sich darauf beziehen, nach dem Splicing auf ein Element in *this verweisen würden |
sich weiterhin auf das Element in other |
[edit] Siehe auch
| fügt zwei sortierte Listen zusammen (public member function) | |
| entfernt Elemente, die bestimmte Kriterien erfüllen (public member function) | |
| gibt einen Iterator vor dem Anfang zurück (public member function) |