C++ STL list 插入元素

一、插入方法

函数功能
push_front()向 list 容器首个元素前添加新元素
push_back()向 list 容器最后一个元素后添加新元素
emplace_front()在容器首个元素前直接生成新的元素
emplace_back()在容器最后一个元素后直接生成新的元素
emplace()在容器的指定位置直接生成新的元素
insert()在指定位置插入新元素
splice()将其他 list 容器存储的多个元素添加到当前 list 容器的指定位置处

1、insert方法

格式说明
iterator insert(pos,elem)在迭代器 pos 指定的位置之前插入一个新元素 elem,并返回表示新插入元素位置的迭代器
iterator insert(pos,n,elem)在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器
iterator insert(pos,first,last)在迭代器 pos 指定的位置之前,插入其他容器(例如 array、vector、deque 等)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器
iterator insert(pos,initlist)在迭代器 pos 指定的位置之前,插入初始化列表(用大括号 { } 括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器

2、splice方法

格式说明
void splice (iterator position, list& x);单元 2
单元 3position 为迭代器,用于指明插入位置;x 为另一个 list 容器。此格式的 splice() 方法的功能是,将 x 容器中存储的所有元素全部移动当前 list 容器中 position 指明的位置处
void splice (iterator position, list& x, iterator i);position 为迭代器,用于指明插入位置;x 为另一个 list 容器;i 也是一个迭代器,用于指向 x 容器中某个元素。此格式的 splice() 方法的功能是将 x 容器中 i 指向的元素移动到当前容器中 position 指明的位置处。
void splice (iterator position, list& x, iterator first, iterator last);position 为迭代器,用于指明插入位置;x 为另一个 list 容器;first 和 last 都是迭代器,[fist,last) 用于指定 x 容器中的某个区域。此格式的 splice() 方法的功能是将 x 容器 [first, last) 范围内所有的元素移动到当前容器 position 指明的位置处。

splice() 成员方法移动元素的方式

将存储该元素的节点从 list 容器底层的链表中摘除,然后再链接到当前 list 容器底层的链表中。当使用 splice() 成员方法将list1容器中的元素添加到list2容器的同时,该元素会从list1容器中删除。

二、实例

这里主要是splice方法的实例

1、方法1

std::list<int> listInt1{ 16,72,100 }, listInt2{9,201,94};
    std::list<int>::iterator listIter = ++listInt1.begin();

    **listInt1.splice(listIter, listInt2);**

    int i = 0;
    std::list<int>::iterator listIter1 = listInt1.begin();
    std::list<int>::iterator listIter2 = listInt2.begin();
    for (; listIter1 != listInt1.end(); listIter1++)
    {
        std::cout << " splice1 listInt1[" << i++ << "]=" << *listIter1 << std::endl;
    }
    for (; listIter2 != listInt2.end(); listIter2++)
    {
        std::cout << " splice1 listInt2[" << i++ << "]=" << *listIter2 << std::endl;
    }

结果如下:
image.png

2、方法2

std::list<int> listInt1{ 16,72,100 }, listInt2{9,201,94};
    std::list<int>::iterator listIter = ++listInt1.begin();

    **listInt2.splice(listInt2.begin(), listInt1, listIter);**

    int i = 0;
    std::list<int>::iterator listIter1 = listInt1.begin();
    std::list<int>::iterator listIter2 = listInt2.begin();
    for (; listIter1 != listInt1.end(); listIter1++)
    {
        std::cout << " splice1 listInt1[" << i++ << "]=" << *listIter1 << std::endl;
    }
    for (; listIter2 != listInt2.end(); listIter2++)
    {
        std::cout << " splice1 listInt2[" << i++ << "]=" << *listIter2 << std::endl;
    }

结果如下:
image.png

3、方法3

std::list<int> listInt1{ 16,72,100 }, listInt2{9,201,94};
    std::list<int>::iterator listIter = ++listInt1.begin();

   ** listInt2.splice(listInt2.begin(), listInt1, listInt1.begin(), listInt1.end());**

    int i = 0;
    std::list<int>::iterator listIter1 = listInt1.begin();
    std::list<int>::iterator listIter2 = listInt2.begin();
    for (; listIter1 != listInt1.end(); listIter1++)
    {
        std::cout << " splice1 listInt1[" << i++ << "]=" << *listIter1 << std::endl;
    }
    for (; listIter2 != listInt2.end(); listIter2++)
    {
        std::cout << " splice1 listInt2[" << i++ << "]=" << *listIter2 << std::endl;
    }

结果如下:
image.png

小菜鸟一枚,望各位大佬不吝指教,用于记录学习

1 声望
0 粉丝
0 条评论
推荐阅读
C++ STL multiset容器
multiset 类模板提供的构造函数,和 set 类模板中提供创建 set 容器的构造函数,是完全相同的。因此创建set容器的方式适用于创建multiset容器。具体的方法参考set容器:[链接]

等待樱花盛开阅读 970

python里打印list的四种方法
原文链接标题:Print lists in Python (4 Different Ways)用for循环来打印 {代码...} 结果1 2 3 4 5用 * 星号来打印 {代码...} 结果 {代码...} 把list转换为str来打印 {代码...} 结果 {代码...} 用map把数组里非...

chiiinnn阅读 10.3k

封面图
麒麟操作系统 (kylinos) 从入门到精通 - 研发环境 - 第二十一篇 C++/C语言开发环境搭建
类别:笔记本型号:中国长城 NF14C硬件平台:飞腾处理器(ArmV8 指令集)系统:银河麒麟操作系统 V10 SP1(2203) 关键词:信创,麒麟系统,linux,c++,c,内核飞腾,arm

码上世界1阅读 2.3k评论 1

封面图
万字避坑指南!C++的缺陷与思考(下)
导读 | 在万字避坑指南!C++的缺陷与思考(上)一文中,微信后台开发工程师胡博豪,分享了C++的发展历史、右值引用与移动语义、类型说明符等内容,深受广大开发者喜爱!此篇,我们邀请作者继续总结其在C++开发过...

腾讯云开发者5阅读 484评论 1

java开发中遇到的一些问题
1.1HashMap存key,value,key会有重复的,value会有多个值,选取此方式进行存取,动态获取key,value取list,若满足条件,list一直add,key覆盖掉之前的,list一直在增加。

Jackson阅读 1.1k

一种将函数模板定义和声明分开的方法
&emsp;&emsp;在 C++ 中为了操作简洁引入了函数模板。所谓的函数模板实际上是建立一个通用函数,其函数类型或形参类型不具体指定,用一个虚拟的类型来表达,这个通用函数就称为函数模板。

Sharemaker阅读 864

封面图
Workflow的JSON解析器
Workflow中有一个小而美的json-parser,一千行代码写得非常典雅精致。不仅可以学习到经典的C语言写法、递归解析的架构、与内核近似的编码风格、简洁的接口设计,而且也非常方便引入项目中作为轻量级的json解析器...

1412阅读 812

小菜鸟一枚,望各位大佬不吝指教,用于记录学习

1 声望
0 粉丝
宣传栏