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).

例子:

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

 

posted @ 2018-09-04 14:35  康托漫步  阅读(861)  评论(0编辑  收藏  举报