list::splice()函数详解
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;
}
最新文章
- 对数据库触发器new和old的理解
- 记录我开始学习 Git的路程
- LAMT基于mod_jk方式的负载均衡集群
- Three ways to do WCF instance management
- c++ 07
- 解决struts2中UI标签出现的问题: The Struts dispatcher cannot be found
- winform中执行任务,解决未响应界面
- big_menu菜单设置
- leetCode刷题(使用链表做加法)
- 我的Qt历程1:第一个Qt程序
- C# 多线程之Task(任务
- VMware Pro 14.1.2 官方正式版及激活密钥
- MySql 主从同步 (库名不同)
- Python框架----cookie和session
- Contest1036 - 2017西安电子科技大学程序设计新生赛网络预选赛
- leedcode_贪心算法系列
- netty 之 传统的阻塞io 体系回顾
- java实现树状图
- 在VS中安装/使用 MVVMLight
- pandas(五)处理缺失数据和层次化索引
热门文章
- AngularJs学习笔记--bootstrap
- KafkaClient接口与Kafka处理请求的若干特性
- PE文件结构
- 【译】使用 Python 编写虚拟机解释器
- 1234[&#39;toString&#39;][&#39;length&#39;] 等于啥?
- laravel笔记
- android开发环境搭建(for 驱动开发人员)
- hdu 3658 How many words
- ios开发--GCD使用介绍:4-延迟执行操作
- ntelliJ IDEA 14 注册码