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
单元 3 position 为迭代器,用于指明插入位置;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 listInt1{ 16,72,100 }, listInt2{9,201,94}; std::list::iterator listIter = ++listInt1.begin(); **listInt1.splice(listIter, listInt2); **int i = 0; std::list::iterator listIter1 = listInt1.begin(); std::list::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; }

结果如下:
C++ STL list 插入元素
文章图片

2、方法2
std::list listInt1{ 16,72,100 }, listInt2{9,201,94}; std::list::iterator listIter = ++listInt1.begin(); **listInt2.splice(listInt2.begin(), listInt1, listIter); **int i = 0; std::list::iterator listIter1 = listInt1.begin(); std::list::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; }

结果如下:
C++ STL list 插入元素
文章图片

3、方法3
std::list listInt1{ 16,72,100 }, listInt2{9,201,94}; std::list::iterator listIter = ++listInt1.begin(); ** listInt2.splice(listInt2.begin(), listInt1, listInt1.begin(), listInt1.end()); **int i = 0; std::list::iterator listIter1 = listInt1.begin(); std::list::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; }

【C++ STL list 插入元素】结果如下:
C++ STL list 插入元素
文章图片

    推荐阅读