C++11 list::splice()函数的使用

1、list::splice()原型

list1.splice (iterator position, list2)
                or 
list1.splice (iterator position, list2, iterator i)
                or 
list1.splice (iterator position, list2, iterator first, iterator last)

2、实现的功能

2.1、 list1.splice (iterator position, list2)

把list2中的内容剪切(不是复制)并从list1的position位置开始插入。

案例1:从list1的头部位置开始全部插入

int main()
{
    std::list<int> pre{1,2,3,4,5,6,7,8,9,10};
    for(auto i:pre)
    {
        cout<<i<<" ";
    }
    cout<<std::endl;
    list<int> re{20,30,40};
    int datasize=5;
    re.splice(re.begin(),pre);
    for(auto j:re)
    {
        cout<<j<<" ";
    }
    cout<<endl;
    for(auto i:pre)
    {
        cout<<i<<" ";
    }
    cout<<std::endl;
    return 0;
}

打印结果:
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 20 30 40 

案例2:从list1的第二个位置开始全部插入

int main()
{
    std::list<int> pre{1,2,3,4,5,6,7,8,9,10};
    for(auto i:pre)
    {
        cout<<i<<" ";
    }
    cout<<std::endl;
    list<int> re{20,30,40};
    int datasize=5;
    re.splice(++re.begin(),pre);
    for(auto j:re)
    {
        cout<<j<<" ";
    }
    cout<<endl;
    for(auto i:pre)
    {
        cout<<i<<" ";
    }
    cout<<std::endl;
    return 0;
}
打印结果:
1 2 3 4 5 6 7 8 9 10 
20 1 2 3 4 5 6 7 8 9 10 30 40 

案例3:从list1的尾部开始全部插入

int main()
{
    std::list<int> pre{1,2,3,4,5,6,7,8,9,10};
    for(auto i:pre)
    {
        cout<<i<<" ";
    }
    cout<<std::endl;

    list<int> re{20,30,40};
    int datasize=5;
    re.splice(re.end(),pre);
    for(auto j:re)
    {
        cout<<j<<" ";
    }
    cout<<endl;

    for(auto i:pre)
    {
        cout<<i<<" ";
    }
    cout<<std::endl;
    return 0;
}
打印结果:
1 2 3 4 5 6 7 8 9 10 
20 30 40 1 2 3 4 5 6 7 8 9 10 

2.2、list1.splice (iterator position, list2, iterator i)

把list2中从i位置的单个数据剪切(不是复制)并插入到list1的position位置
案例1:把list2的首元素插入到list1的首位

int main()
{
    std::list<int> pre{1,2,3,4,5,6,7,8,9,10};
    for(auto i:pre)
    {
        cout<<i<<" ";
    }
    cout<<std::endl;

    list<int> re{20,30,40};
    int datasize=5;
    re.splice(re.begin(),pre,pre.begin());
    for(auto j:re)
    {
        cout<<j<<" ";
    }
    cout<<endl;

    for(auto i:pre)
    {
        cout<<i<<" ";
    }
    cout<<std::endl;
    return 0;
}

打印结果:
1 2 3 4 5 6 7 8 9 10 
1 20 30 40 
2 3 4 5 6 7 8 9 10 
2.3、list1.splice (iterator position, list2, iterator first, iterator last)

把list2中从first开始到last结束 (不包括last位置),这段区间内的数据剪切并从list1的position的位置开始插入。

案例1:把list2的前两个元素插入到list1的开始

int main()
{
    std::list<int> pre{1,2,3,4,5,6,7,8,9,10};
    for(auto i:pre)
    {
        cout<<i<<" ";
    }
    cout<<std::endl;

    list<int> re{20,30,40};
    int datasize=5;
    re.splice(re.begin(),pre,pre.begin(),++(++pre.begin()));
    for(auto j:re)
    {
        cout<<j<<" ";
    }
    cout<<endl;

    for(auto i:pre)
    {
        cout<<i<<" ";
    }
    cout<<std::endl;
    return 0;
}
打印结果:
1 2 3 4 5 6 7 8 9 10 
1 2 20 30 40 
3 4 5 6 7 8 9 10 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值