📅  最后修改于: 2023-12-03 14:59:45.756000             🧑  作者: Mango
std::list::splice()
是C++ STL中list容器提供的成员函数之一,它允许将一段元素(节点)从当前列表中移除,并将它们插入到另一个列表的给定位置。这个函数是通过双向链表的指针操作实现的。
void splice(const_iterator pos, list& other);
void splice(const_iterator pos, list& other, const_iterator it);
void splice(const_iterator pos, list& other, const_iterator first, const_iterator last);
pos
- 表示将被插入的位置other
- 另一个列表first
, last
- 要在源列表中删除的元素的指示it
- 要在源列表中删除的一个元素的指示splice()
函数有三种调用方式:
第一种调用方式将other
所有元素插入到当前列表中的pos
为空节数或首位元素前面:
some_list.splice(some_list.begin(), other);
第二种调用方式将other
中一个元素(通过it
参数指示)插入到pos
前面:
some_list.splice(pos, other, it);
第三种调用方式将从first
到last
所有元素删除,并将它们插入到pos
前面:
some_list.splice(pos, other, first, last);
#include <iostream>
#include <list>
int main () {
std::list<int> mylist1, mylist2;
std::list<int>::iterator it;
// list initialization
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;
// splice first example
mylist1.splice (it, mylist2); // mylist1: 1 10 20 30 2 3 4,mylist2: empty
// splice second example
mylist2.splice (mylist2.begin(),mylist1, it);
//splice third example
it = mylist1.begin();
std::advance(it,3);
mylist1.splice ( mylist1.begin(), mylist1, it, mylist1.end());
// print out list
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.begin(); it!=mylist2.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
在上面的示例中,我们首先创建两个list
对象mylist1
和mylist2
,并使用push_back()
函数将一些数字添加到每个对象中。
接下来我们使用advance()
函数将迭代器it
指向mylist1
中的第二个元素。然后使用第一种调用方式,将mylist2
中的所有元素插入到mylist1
中的it
之前(也就是在2
的前面)。
接下来我们使用第二种调用方式,将mylist1
中的it
之后的元素(也就是3
和4
)中的第一个元素插入到mylist2
中。我们使用begin()
函数获取mylist2
的迭代器,使得新元素被插入到mylist2
的最前面。
最后,我们使用第三种调用方式,将mylist1
中从it
开始到end()
的所有元素从原位置移动到mylist1
的开始。
最后,我们通过循环遍历mylist1
和mylist2
,输出它们中所有的元素,以验证这些列表在各种调用之后所包含的内容。在执行完上述代码后,您将会在终端看到下列输出:
mylist1 contains: 3 4 1 10 20 30 2
mylist2 contains: 4