http://blog.csdn.net/bichenggui/article/details/4674900

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;

}

最新文章

  1. 对数据库触发器new和old的理解
  2. 记录我开始学习 Git的路程
  3. LAMT基于mod_jk方式的负载均衡集群
  4. Three ways to do WCF instance management
  5. c++ 07
  6. 解决struts2中UI标签出现的问题: The Struts dispatcher cannot be found
  7. winform中执行任务,解决未响应界面
  8. big_menu菜单设置
  9. leetCode刷题(使用链表做加法)
  10. 我的Qt历程1:第一个Qt程序
  11. C# 多线程之Task(任务
  12. VMware Pro 14.1.2 官方正式版及激活密钥
  13. MySql 主从同步 (库名不同)
  14. Python框架----cookie和session
  15. Contest1036 - 2017西安电子科技大学程序设计新生赛网络预选赛
  16. leedcode_贪心算法系列
  17. netty 之 传统的阻塞io 体系回顾
  18. java实现树状图
  19. 在VS中安装/使用 MVVMLight
  20. pandas(五)处理缺失数据和层次化索引

热门文章

  1. AngularJs学习笔记--bootstrap
  2. KafkaClient接口与Kafka处理请求的若干特性
  3. PE文件结构
  4. 【译】使用 Python 编写虚拟机解释器
  5. 1234[&#39;toString&#39;][&#39;length&#39;] 等于啥?
  6. laravel笔记
  7. android开发环境搭建(for 驱动开发人员)
  8. hdu 3658 How many words
  9. ios开发--GCD使用介绍:4-延迟执行操作
  10. ntelliJ IDEA 14 注册码