(转)list::splice()函数详解

list::splice实现list拼接的功能。将源list的内容部分或全部元素删除,拼插入到目的list。

函数有以下三种声明:

void splice ( iterator position, list<T,Allocator>& x );  //

void splice ( iterator position, list<T,Allocator>& x, iterator i );

void splice ( iterator position, list<T,Allocator>& x, iterator first, iterator last );

函数说明:在list间移动元素:

将x的元素移动到目的list的指定位置,高效的将他们插入到目的list并从x中删除。

目的list的大小会增加,增加的大小为插入元素的大小。x的大小相应的会减少同样的大小。

前两个函数不会涉及到元素的创建或销毁。第三个函数会。

指向被删除元素的迭代器会失效。

参数:

position

目的list的位置,用来标明 插入位置

x

源list、

first,last

x里需要被移动的元素的迭代器。区间为[first, last).

包含first指向的元素,不包含last指向的元素。

例子:


代码
// splicing lists

#include 
<iostream>

#include 
<list>

#include 
<string>

#include 
<algorithm>

using namespace std;

int main ()

{

  list
<int> mylist1, mylist2;

  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;                         // points to 2

  mylist1.splice (it, mylist2); 
// mylist1: 1 10 20 30 2 3 4

                                
// mylist2 (empty)

                                
// "it" still points to 2 (the 5th element)                                     

  mylist2.splice (mylist2.begin(),mylist1, it);

                                
// mylist1: 1 10 20 30 3 4

                                
// mylist2: 2

                                
// "it" is now invalid.

  it 
= mylist1.begin();

  advance(it,
3);                // "it" points now to 30

  mylist1.splice ( mylist1.begin(), mylist1, it, mylist1.end());

                                
// mylist1: 30 3 4 1 10 20

  cout 
<< "mylist1 contains:";

  
for (it=mylist1.begin(); it!=mylist1.end(); it++)

    cout 
<< " " << *it;

  cout 
<< "\nmylist2 contains:";

  
for (it=mylist2.begin(); it!=mylist2.end(); it++)

    cout 
<< " " << *it;

  cout 
<< endl;

  list
<string> dictionary, bword;

  dictionary.push_back(
"any");

  dictionary.push_back(
"angle");

  dictionary.push_back(
"ajust");

  dictionary.push_back(
"common");

  dictionary.push_back(
"cannon");

  dictionary.push_back(
"company");

  bword.push_back(
"blue");

  bword.push_back(
"banana");

  bword.push_back(
"break");

  list
<string>::iterator its = dictionary.begin();

  
for (int i = 0; i < 3; i++)

      its
++;

 dictionary.splice(its, bword);

 copy(bword.begin(), bword.end(), ostream_iterator
<string>(cout, "\n"));

 
return 0;

}

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/bichenggui/archive/2009/10/15/4674900.aspx

posted @ 2010-10-22 10:04  oayx  阅读(954)  评论(0编辑  收藏  举报