list-splice

////////////////////////////////////////
//      2018/04/27 11:09:23
//      list-splice

// merge two lists
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>

using namespace std;

template<class T>
class Print{
public:
    void operator ()(T& t){
        cout << t << " ";
    }
};
//========================================

int main(){
    list<int> li1, li2, li3,li4;
    Print<int> print;

    for (int i = 1; i <= 5; i++){
        li1.push_back(i);
        li2.push_back(i + 5);
        li3.push_back(i + 10);;
        li4.push_back(i + 15);
    }

    cout << "li1:";
    for_each(li1.begin(), li1.end(),print);
    cout << endl;

    cout << "li2:";
    for_each(li2.begin(), li2.end(), print);
    cout << endl;

    cout << "li3:";
    for_each(li3.begin(), li3.end(), print);
    cout << endl;

    cout << "li4:";
    for_each(li4.begin(),li4.end(), print);
    cout << endl;

    // splice 连接
    li1.splice(li1.end(),li2);
    cout << "li1:";
    for_each(li1.begin(), li1.end(), print);
    cout << endl;

    cout << "li2:";
    for_each(li2.begin(), li2.end(),print);
    cout << endl;

    li1.splice(li1.end(), li3, li3.begin(), li3.end());
    cout << "li1:";
    for_each(li1.begin(), li1.end(), print);
    cout << endl;

    list<int>::iterator it;
    it = find(li4.begin(), li4.end(), 18);
    li1.splice(li1.begin(),li4,it);
    cout << "li1:";
    for_each(li1.begin(), li1.end(), print);
    cout << endl;

    cout << "li4:";
    for_each(li4.begin(), li4.end(), print);
    cout << endl;
    return 0;
}

/*
OUTPUT:
    li1:1 2 3 4 5
    li2:6 7 8 9 10
    li3:11 12 13 14 15
    li4:16 17 18 19 20
    li1:1 2 3 4 5 6 7 8 9 10
    li2:
    li1:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
    li1:18 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
    li4:16 17 19 20
*/ 
原文地址:https://www.cnblogs.com/laohaozi/p/12537929.html