c++::list::splice

今天根据http://www.cplusplus.com/reference/list/list/splice/看了list splice方法的具体使用。

list splice作用是将两个list进行拼接,有三种使用方法。

void splice (iterator position, list& x);
void splice (iterator position, list& x, iterator i);
void splice (iterator position, list& x, iterator first, iterator last);

有兴趣的可以仔细看一下上面链接的解释。下面我通过例子解释一下用法。

1、void splice (iterator position, list& x);

#include <iostream>
#include <list>
using namespace std;

int main()
{
      std::list<int> mylist1, mylist2;
      std::list<int>::iterator iter;
      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

      for (it=mylist1.begin(); it!=mylist1.end(); ++it)
         std::cout << ' ' << *it;
      std::cout << '\n';
      for (it=mylist2.begin(); it!=mylist2.end(); ++it)
         std::cout << ' ' << *it;
      std::cout << '\n';

      iter = mylist1.begin();
      ++iter;

   //1.test void splice (iterator position, list& x);
      mylist1.splice (iter, mylist2);
      cout << "iter=" << *iter << endl;

      for (it=mylist1.begin(); it!=mylist1.end(); ++it)
         std::cout << ' ' << *it;
      std::cout << '\n';
      for (it=mylist2.begin(); it!=mylist2.end(); ++it)
         std::cout << ' ' << *it;
      std::cout << '\n';

      return 1;
}

运行结果:

 1 2 3 4
 10 20 30
 1 10 20 30 2 3 4

结果分析:

初始化:
mylist1: 1 2 3 4
mylist2:   10 20 30
splice之后:
mylist1:  1 10 20 30 2 3 4
mylist2:

iterator position:表示插入list的位置
list& x:表示被插入的list
插入之后,x list被清空。

2、void splice (iterator position, list& x, iterator i);

#include <iostream>
#include <list>
using namespace std;

int main()
{
      std::list<int> mylist1, mylist2;
      std::list<int>::iterator iter;
      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

      for (it=mylist1.begin(); it!=mylist1.end(); ++it)
         std::cout << ' ' << *it;
      std::cout << '\n';
      for (it=mylist2.begin(); it!=mylist2.end(); ++it)
         std::cout << ' ' << *it;
      std::cout << '\n';

      iter = mylist1.begin();
      ++iter;

   //1.test void splice (iterator position, list& x);
      mylist1.splice (iter, mylist2);

      for (it=mylist1.begin(); it!=mylist1.end(); ++it)
         std::cout << ' ' << *it;
      std::cout << '\n';
      for (it=mylist2.begin(); it!=mylist2.end(); ++it)
         std::cout << ' ' << *it;
      std::cout << '\n';

   //2.test void splice (iterator position, list& x, iterator i);
      mylist2.splice (mylist2.begin(),mylist1, iter);
      for (it=mylist1.begin(); it!=mylist1.end(); ++it)
         std::cout << ' ' << *it;
      std::cout << '\n';
      for (it=mylist2.begin(); it!=mylist2.end(); ++it)
         std::cout << ' ' << *it;
      std::cout << '\n';
      return 1;
 }

运行结果:

1 2 3 4
10 20 30
1 10 20 30 2 3 4

1 10 20 30 3 4 : 删除了iter指针位置的值
2:将mylist1 lter 指针位置的值插入到了mylist2中

3、void splice (iterator position, list& x, iterator first, iterator last);

#include <iostream>
#include <list>
using namespace std;

int main()
{
      std::list<int> mylist1, mylist2;
      std::list<int>::iterator iter;
      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

      for (it=mylist1.begin(); it!=mylist1.end(); ++it)
         std::cout << ' ' << *it;
      std::cout << '\n';
      for (it=mylist2.begin(); it!=mylist2.end(); ++it)
         std::cout << ' ' << *it;
      std::cout << '\n';

      iter = mylist1.begin();
      ++iter;

   //1.test void splice (iterator position, list& x);
      mylist1.splice (iter, mylist2);

      for (it=mylist1.begin(); it!=mylist1.end(); ++it)
         std::cout << ' ' << *it;
      std::cout << '\n';
      for (it=mylist2.begin(); it!=mylist2.end(); ++it)
         std::cout << ' ' << *it;
      std::cout << '\n';

   //2.test void splice (iterator position, list& x, iterator i);
      mylist2.splice (mylist2.begin(),mylist1, --iter);
      std::cout << *mylist2.begin() << endl;
      for (it=mylist1.begin(); it!=mylist1.end(); ++it)
         std::cout << ' ' << *it;
      std::cout << '\n';
      for (it=mylist2.begin(); it!=mylist2.end(); ++it)
         std::cout << ' ' << *it;
      std::cout << '\n';

   //3.test void splice (iterator position, list& x, iterator first, iterator last);
   mylist2.splice ( mylist2.begin(), mylist1, mylist1.begin(), mylist1.end());
   for (it=mylist1.begin(); it!=mylist1.end(); ++it)
      std::cout << ' ' << *it;
   std::cout << '\n';
   for (it=mylist2.begin(); it!=mylist2.end(); ++it)
      std::cout << ' ' << *it;
   std::cout << '\n';
   return 1;
}                                                                                                                            

运行结果:

 1 2 3 4
 10 20 30
 1 10 20 30 2 3 4

30
 1 10 20 2 3 4
 30
                  : mylist1:被接切到mylist2,所以为空
 1 10 20 2 3 4 30 :mylist2:

iterator position: 表示list插入的位置
list& x: 表示被接切的list
iterator first: 表示被接切list的起点
iterator last: 表示被接切list的终点

猜你喜欢

转载自blog.csdn.net/huigui65/article/details/81389492