乐趣区

关于c++: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<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;
    }

后果如下:

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;
    }

后果如下:

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;
    }

后果如下:

退出移动版