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

< cpp‎ | container‎ | list

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

### 参阅

merge | 合并二个已排序列表 (公开成员函数)
remove remove_if | 移除满足特定标准的元素 (公开成员函数)