std::list<T,Allocator>::splice
void splice( const_iterator pos, list& other ); |
(1) | |
void splice( const_iterator pos, list&& other ); |
(1) | (C++11 起) |
void splice( const_iterator pos, list& other, const_iterator it ); |
(2) | |
void splice( const_iterator pos, list&& other, const_iterator it ); |
(2) | (C++11 起) |
void splice( const_iterator pos, list& other, const_iterator first, const_iterator last); |
(3) | |
void splice( const_iterator pos, list&& other, const_iterator first, const_iterator last ); |
(3) | (C++11 起) |
从一个 list 转移元素给另一个。
不复制或移动元素,仅重指向链表结点的内部指针。若 get_allocator() != other.get_allocator() 则行为未定义。没有迭代器或引用被非法化,指向被移动元素的迭代器保持合法,但现在指代到 *this 中,而非到 other
中。
1) 从
other
转移所有元素到 *this 中。元素被插入到 pos
所指向的元素之前。操作后容器 other
变为空。若 other
与 *this 指代同一对象则行为未定义。2) 从
other
转移 it
所指向的元素到 *this 。元素被插入到 pos
所指向的元素之前。3) 从
other
转移范围 [first, last)
中的元素到 *this 。元素被插入到 pos
所指向的元素之前。若 pos
是范围 [first,last)
中的迭代器则行为未定义。参数
pos | - | 将插入内容到其前的元素 |
other | - | 要自之转移内容的另一容器 |
it | - | 要从 other 转移到 *this 的元素
|
first, last | - | 要从 other 转移到 *this 的元素范围
|
返回值
(无)
异常
不抛出。
复杂度
1-2) 常数。
3) 若 other
与 *this 指代同一对象则为常数,否则与 std::distance(first, last) 成线性。
示例
运行此代码
#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"; }
输出:
list1: 1 2 10 20 30 40 50 3 4 5 list2: list1: 1 2 10 20 30 40 50 list2: 3 4 5
参阅
合并二个已排序列表 (公开成员函数) | |
移除满足特定标准的元素 (公开成员函数) |