(C++17) | ||||
| Sequence | ||||
(C++11) | ||||
(C++26) | ||||
(C++26) | ||||
(C++11) | ||||
| Associative | ||||
| Unordered associative | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
| Adaptors | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
| Views | ||||
(C++20) | ||||
(C++23) | ||||
| Tables | ||||
| Iterator invalidation | ||||
| Member function table | ||||
| Non-member function table |
| Member functions | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Non-member functions | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Deduction guides(C++17) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
void splice_after( const_iterator pos, forward_list& other); | (1) | (since C++11) (constexpr since C++26) |
void splice_after( const_iterator pos, forward_list&& other); | (2) | (since C++11) (constexpr since C++26) |
void splice_after( const_iterator pos, forward_list& other, const_iterator it); | (3) | (since C++11) (constexpr since C++26) |
void splice_after( const_iterator pos, forward_list&& other, const_iterator it); | (4) | (since C++11) (constexpr since C++26) |
void splice_after( const_iterator pos, forward_list& other, const_iterator first, const_iterator last); | (5) | (since C++11) (constexpr since C++26) |
void splice_after( const_iterator pos, forward_list&& other, const_iterator first, const_iterator last); | (6) | (since C++11) (constexpr since C++26) |
Transfers elements fromother to*this. The elements are inserted afterpos.
If any of the following conditions is satisfied, the behavior is undefined:
(before_begin(), end()).[begin(), end()), the behavior is undefined.(first, last).(first, last) is not avalid range inother,(first, last) is not dereferenceable.(first, last).No iterators or references become invalidated. If*this andother refer to different objects, the iterators to the transferred elements now refer into*this, not intoother.
Contents |
| pos | - | element after which the content will be inserted |
| other | - | another container to transfer the content from |
| it | - | iterator preceding the iterator to the element to transfer fromother to*this |
| first, last | - | the pair of iterators defining therange of elements to transfer fromother to*this |
#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 transferred. 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}));}
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 2045 | C++11 | O(1) splicing could not be guaranteed if get_allocator()!= other.get_allocator() | the behavior is undefined in this case |
| LWG 2222 | C++11 | the element pointed to byit is not transferred, but pointers, references and iterators referring to it would refer to an element in*this after splicing | still refer to the element inother |
| merges two sorted lists (public member function)[edit] | |
| removes elements satisfying specific criteria (public member function)[edit] | |
| returns an iterator to the element before beginning (public member function)[edit] |