C++之插入迭代器
#include<iostream>
#include<vector>
#include<list>
#include<iterator>
usingnamespace std;
template<typename T>
voidPrintElements(T c)
{
typename T::const_iterator itr = c.begin();//在GCC下typename不能省略
while(itr != c.end())
{
cout <<*itr++<<" ";
}
cout << endl;
}
int main()
{
vector<int> vecSrc;
list<int> vecDest;
for(vector<int>::size_type i =0; i <3;++i)
{
vecSrc.push_back(i);
}//--0,1,2---
/**
* 第一种方法是调用<iterator>头文件中的函数来返回一个back_insert_iterator对象
* template< class Container >
* std::back_insert_iterator<Container> back_inserter( Container& c );
*/
/**
* 第二种方法是调用back_insert_iterator类的构造函数来创建类对象
* explicit
* back_insert_iterator(_Container& __x) : container(&__x) { }
*/
copy(vecSrc.begin(), vecSrc.end(), back_inserter(vecDest));
//copy(vecSrc.begin(), vecSrc.end(), back_insert_iterator<list<int> >(vecDest));
PrintElements(vecDest);//--0,1,2---
copy(vecSrc.begin(), vecSrc.end(), front_inserter(vecDest));
//copy(vecSrc.begin(), vecSrc.end(), front_insert_iterator<list<int> >(vecDest));
PrintElements(vecDest);//--2,1,0,0,1,2---
copy(vecSrc.begin(),vecSrc.end(), inserter(vecDest,++vecDest.begin()));
//copy(vecSrc.begin(), vecSrc.end(), insert_iterator<list<int> >(vecDest, ++vecDest.begin()));
PrintElements(vecDest);//--2,0,1,2,1,0,0,1,2---
back_insert_iterator<list<int>> itBack = back_inserter(vecDest);//这里也可以直接调用构造函数
*itBack =101;
*itBack =102;//itBack每次都指向容器最后的元素
PrintElements(vecDest);//.....101,102
front_insert_iterator<list<int>> itFront = front_insert_iterator<list<int>>(vecDest);
*itFront =1001;
*itFront =1002;
PrintElements(vecDest);//1002,1001......
insert_iterator<list<int>> itIst = inserter(vecDest, vecDest.begin());
*itIst =11;
*itIst =12;
PrintElements(vecDest);//--11,12,1002,1001.....
// *itIst = value;相当于
// itIst = c.insert(it,value);
// ++itIst;
// insert函数返回的是指向插入元素的迭代器,由于该函数是在给定迭代器之前插入元素,所以++itIst之后
// itIst依然指向的是原来的元素。操作结束后itIst指向的位置未发生改变
return0;
}
C++之插入迭代器的更多相关文章
- c/c++ 标准库 插入迭代器 详解
标准库 插入迭代器 详解 插入迭代器作用:copy等函数不能改变容器的大小,所以有时copy先容器是个空的容器,如果不使用插入迭代器,是无法使用copy等函数的. 例如下面的代码就是错误的: list ...
- 【C++ Primer 第10章】 10.4.1 插入迭代器
目录 • iostream迭代器 • 反向迭代器 插入迭代器 插入迭代器,这些迭代器被绑定到一个容器上,可以向容器插入元素. 头文件为:#include<iterator it=t 在it指 ...
- 迭代器适配器{(插入迭代器back_insert_iterator)、IO流迭代器(istream_iterator、ostream_iterator)}
一.迭代器适配器 反向迭代器 插入迭代器 IO流迭代器 其中反向迭代器可以参考以前的文章. 二.插入迭代器 插入迭代器实际上是一个输出迭代器(*it=; ++) back_insert_iterato ...
- STL之--插入迭代器(back_inserter,inserter,front_inserter的区别)
除了普通迭代器,C++标准模板库还定义了几种特殊的迭代器,分别是插入迭代器.流迭代器.反向迭代器和移动迭代器,定义在<iterator>头文件中,下面主要介绍三种插入迭代器(back_in ...
- C++迭代器之'插入迭代器
1. 定义 插入型迭代器(Insert Iterator),又叫插入器(Inserter). 2. 作用 插入迭代器的主要功能为把一个赋值操作转换为把相应的值插入容器的操作.算法库对所有在容器上的操作 ...
- uva 12096 The SetStack Computer(STL set的各种库函数 交集 并集 插入迭代器)
题意: 有5种操作: PUSH:加入“{}”空集合入栈. DUP:栈顶元素再入栈. UNION:出栈两个集合,取并集入栈. INTERSECT:出栈两个集合,取交集入栈. ADD:出栈两个集合,将先出 ...
- 【C++ Primer 第10章】 10.4.2 插入迭代器
iostream迭代器 标准库为iostream定义了可用于这些IO类型对象的迭代器. istream_iterator读取输入流, ostream_iterator向一个输出流写数据. 1. i ...
- c++ insert iterators 插入型迭代器
insert iterators 插入型迭代器 (1)front inserters 前向插入迭代器 只适用于提供有push_front()成员函数的容器,在标准程序库中这样的容器是deque和lis ...
- 10.4 再探迭代器-插入/IO/反向
10.4.1 插入迭代器 插入迭代器接受一个容器,生成一个迭代器,通过向该迭代器赋值可以实现向容器添加元素 (1)back_inserter: 接受一个参数, 示例: auto iter = back ...
随机推荐
- 解题:CQOI 2017 小Q的棋盘
题面 由树的结构我们可以知道,最终要么是连一条(最长的)链都没走完,要么是走了一些点最后走了最长的链.为什么总是说最长的链呢,因为在树上这样走的过程中(最后不要求返回的话)除了一条链都会被走两次,显然 ...
- 【agc001d】Arrays and Palindrome
Portal -->agc001D Description 给你一个\(m\)个数的排列\(A\),这个\(A\)中元素的顺序可以随便调换,\(A\)中的元素的和为\(n\),现在要你构造一个数 ...
- 关于JavaScript诞生之初的趣事
我在读很多优秀的JavaScript源码时候常常被它诡异的语法搞的精疲力尽,所以时不时的加固JavaScript基础知识是十分有必要的,这些知识每次温故或者你换个角度去思考都能收获颇多,那么如此深不可 ...
- 1.Linux的发展历史以及 GNUGPL和open source
发展历史: 20实际60年代:那时候的计算机一般只有在军事,科研以及学术院校才能见到,不是一般人能接触的东西.开始的时候计算机的时候的输入靠卡片阅读器,即程序开发者在卡片上打洞放入卡片阅读器上输入,在 ...
- PythonCodingRule简略
- django中django.conf.urls.url函数
在urls.py文件中,我们经常会看到类似于这样的代码: urlpatterns = [ url(r'^blog/(?P<year>[0-9]{4})/$', views.year_arc ...
- GO_05:GO语言基础map与函数
1. map 1. 类似其它语言中的哈希表活着字典,以 key-value 形式存储数据 2. key 必须是支持 == 或 != 比较运算的类型,不可以是函数.map 或 slice 3. map ...
- 转:IOS:查找SDK路径和Framework头文件
通过Terminal进入Xcode.app所在目录,可以找到相应的SDK路径,相关 的Framework的头文件也在改目录下. 示例如下: Frameworks /Applications/xcode ...
- 微信 js-sdk
使用方法 http://mp.weixin.qq.com/wiki/11/74ad127cc054f6b80759c40f77ec03db.html Demo http://203.195.235.7 ...
- Linux Ubuntu下安装配置mysql
检查系统中是否已经安装了mysql: sudo netstat -tap | grep mysql 安装mysql: sudo apt-get install mysql-server sudo ap ...