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 ...
随机推荐
- c++操作mysql入门详解
首先,根据你当前的操作系统,还有开发工具,选择相应的mysql版本.本人选择的环境是win10 + vs2013 需要解决三个问题:1.下载安装mysql服务器,并登录mysql测试一下是否安装成功: ...
- socket利用多线程实现一对多通信
1.服务器端:socket()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接.将accept()写入死循环,每次连接一个客户端,开一个线程. 2.一般情况下建立s ...
- Linux系统自动备份的Shell
公司现在需要对现有的服务器进行定期备份,并将备份文件放置到正在使用的NAS中去: 为了备份的效率,还需要对备份的文件进行筛选,排除一些后缀名的文件: 实现方法如下: 1. 编写备份的shell文件 在 ...
- The Ph.D. Grind
The Ph.D. Grind A Ph.D. Student Memoir Summary The Ph.D. Grind, a 122-page e-book, is the first know ...
- Postgresql数据库安装中文全文搜索插件zhparser的问题
在PG数据库的基础上加装zhparser中文全文搜索插件,说实话,挺怕这些单独编译安装的插件的,因为安装PG数据库方法的不同,最后可能导致安装的插件各种安装不上,这里说一下我遇到的坑,系统环境是Cen ...
- 20155227 2016-2017-2 《Java程序设计》第四周学习总结
20155227 2016-2017-2 <Java程序设计>第四周学习总结 教材学习内容总结 继承 继承 继承是Java程序设计语言面向对象的又一重要体现,允许子类继承父类,避免重复的行 ...
- getElementById()方法取值
举例子: javascript: var time = document.getElementById('jidu').value; //指定时间 var taskclass = document.g ...
- 30、hashCode方法
HashCode方法的作用 在HashSet中的元素是不能重复的,jvm可以通过equals方法来判断两个对象是否相同,假设自定义一个Person类里面有10个成员变量,每调用一次equals方法需要 ...
- 容斥原理&&莫比乌斯专题
A题:A - Eddy's爱好 HDU - 2204 具体思路:如果是求n中,为平方数的有多少个,那么答案肯定是sqrt(n),同理,如果是三次根号的话,那么答案肯定是n的三分之一次方.然后继续按 ...
- 差分约束系统+输出路径(I - Advertisement POJ - 1752 )
题目链接:https://cn.vjudge.net/contest/276233#problem/I 题目大意:输入k和n,然后输入n行,每一次输入两个数,代表开端和结尾,如果这个区间内点的个数大于 ...