🔥个人主页: Forcible Bug Maker
🔥专栏: STL || C++
目录
前言
本篇博客主要内容:STL库中list用法的讲解。
让我们接着上一篇博文的内容继续,进入list最后一个模块,操作list对象的接口函数。
🔥操作list对象的接口函数(opeartions)
splice
从x中转移元素到容器中,并将它们插入到指定的位置(功能相当于剪切)。
这实际上是将这些元素插入到容器中,并从x中移除它们,从而改变两个容器的大小。这个操作不涉及任何元素的构造或销毁。元素被转移,无论x是左值还是右值,或者value_type是否支持移动构造。
entire list (1)
void splice (iterator position, list& x);
single element (2)
void splice (iterator position, list& x, iterator i);
element range (3)
void splice (iterator position, list& x, iterator first, iterator last);
第一个版本(1)将x中的所有元素转移到容器中position指向的元素之前。
第二个版本(2)仅将x中由i指向的元素转移到容器中position指向的元素之前。
第三个版本(3)将x中迭代器范围[first,last)
中的元素转移到容器中position指向的元素之前。
代码案例:
// splicing lists
#include <iostream>
#include <list>
int main ()
{
std::list<int> mylist1, mylist2;
std::list<int>::iterator it;
// set some initial values:
for (int i=1; i<=4; ++i)
mylist1.push_back(i); // mylist1: 1 2 3 4
for (int i=1; i<=3; ++i)
mylist2.push_back(i*10); // mylist2: 10 20 30
it = mylist1.begin();
++it; // 迭代器指向 2
mylist1.splice (it, mylist2); // mylist1: 1 10 20 30 2 3 4
// mylist2 (empty)
// "it" 迭代器仍然指向 2 (第五个元素)
mylist2.splice (mylist2.begin(),mylist1, it);
// mylist1: 1 10 20 30 3 4
// mylist2: 2
// "it"迭代器现在失效了
it = mylist1.begin();
std::advance(it,3); // "it" 迭代器现在指向 30
mylist1.splice ( mylist1.begin(), mylist1, it, mylist1.end());
// mylist1: 30 3 4 1 10 20
std::cout << "mylist1 contains:";
for (it=mylist1.begin(); it!=mylist1.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
std::cout << "mylist2 contains:";
for (it=mylist2