标准库提供了三个所谓的insertion adapter,这些adapter让我们得以避免使用容器的assignment运算符:

欲使用上述三种adapter,首先必须包含iterator头文件:

  #include <iterator>

这些adapter并不能用在array上。array并不支持元素插入操作。

insertion adapter作用:

尾部插入器(back_insert_iterator):

头部插入器(front_insert_iterator):

普通插入器(insert_iterator):


例1图片,参考自博文STL之–插入迭代器

例1

#include<list>
#include<iostream>
#include<iterator>using namespace std;int main()
{list<int> lst = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };list<int> lst2 ={10}, lst3={10},lst4={10};copy(lst.cbegin(), lst.cend(), back_inserter(lst2));//lst2包含10,1,2,3,4,5,6,7,8,9list<int>::iterator iter;copy(lst.cbegin(), lst.cend(), inserter(lst3, lst3.begin()));//lst3包含1,2,3,4,5,6,7,8,9,10copy(lst.cbegin(), lst.cend(), front_inserter(lst4));//lst4包含9,8,7,6,5,4,3,2,1,10for(iter=lst2.begin();iter!=lst2.end();++iter)cout<<*iter<<' ';cout<<endl;for(iter=lst3.begin();iter!=lst3.end();++iter)cout<<*iter<<' ';cout<<endl;for(iter=lst4.begin();iter!=lst4.end();++iter)cout<<*iter<<' ';cout<<endl;return 0;
}

运行结果:

例2,参考自博文C++迭代器之插入迭代器

#include <iostream>
#include <vector>
#include <list>
#include <deque>
#include <set>
#include <iterator>using namespace std;int main()
{vector<int> V;list<int> L;for(int i = 0; i < 10; ++i)V.push_back(i %5);//back_insertercopy(V.begin(), V.end(), back_inserter(L));list<int>:: iterator it;for(it = L.begin(); it != L.end(); it++){cout <<*it<<" ";}cout << endl;//    front_inserterdeque<int> dq;copy(V.begin(), V.end(), front_inserter(dq));deque<int>:: iterator it1;for(it1 = dq.begin(); it1 != dq.end(); it1++){cout <<*it1<<" ";}cout << endl;
//     insert_iteratorset<int> s;copy(L.begin(), L.end(), inserter(s, s.begin()));set<int>::iterator it2;for(it2 = s.begin(); it2 != s.end(); it2 ++){cout<<*it2<<" ";}return 0;
}

运行结果:

例2分析:

例3(对博文《Essential C++》笔记之设计一个泛型算法(二))程序重新实现,其中调用filter()时采用vector的back_inserter:

//小问学编程
#include <iostream>
#include <functional>
#include <algorithm>
#include <vector>
#include <iterator>using namespace std;template<typename InputIterator,typename OutputIterator,typename ElemType,typename Comp>
OutputIterator filter(InputIterator first,InputIterator last,OutputIterator at,const ElemType &val,Comp pred);int main()
{const int elem_size=8;int ia[elem_size]={12,8,43,0,6,21,3,7};vector<int> ivec(ia,ia+elem_size);//下面这个容器用来储存过滤结果int ia2[elem_size];vector<int> ivec2;cout<<"filtering integer vector for values less than 8\n";filter(ia,ia+elem_size,ia2,elem_size,less<int>());cout<<"filtering integer vector for value greater than 8\n";filter(ivec.begin(),ivec.end(),back_inserter(ivec2),elem_size,greater<int>());
}template<typename InputIterator,typename OutputIterator,typename ElemType,typename Comp>
OutputIterator filter(InputIterator first,InputIterator last,OutputIterator at,const ElemType &val,Comp pred)
{while((first=find_if(first,last,bind2nd(pred,val)))!=last){//观察进行情形cout<<"found value:"<<*first<<endl;//执行assign操作,然后令两个iterator前进*at++=*first++;}return at;
}
//本代码摘自《Essential C++》中文版P87

运行结果:

《Essential C++》笔记之Iterator Inserter(插入迭代器)相关推荐

  1. C++ Primer笔记——unqiue、插入迭代器、流迭代器、insert返回值、关联容器的删与查

    目录 一.P343 unique 二.P358 插入迭代器 三.P359 iostream迭代器 四.P384 检测insert的返回值(关联容器) 五.P386 删除元素(关联容器) 六.P387 ...

  2. 插入迭代器、流迭代器、反向迭代器、移动迭代器

    文章目录 前言 插入迭代器 inserter front_inserter back_inserter iostream迭代器 istream_iterator 读取输入流 istream_itera ...

  3. C++迭代器之'插入迭代器'

    插入迭代器(Insert Iterator),又叫插入器(Inserter),是继上次的反向迭代器之后C++中的又一个迭代器适配器.插入迭代器的主要功能为把一个赋值操作转换为把相应的值插入容器的操作. ...

  4. c/c++ 标准库 插入迭代器 详解

    标准库 插入迭代器 详解 插入迭代器作用:copy等函数不能改变容器的大小,所以有时copy先容器是个空的容器,如果不使用插入迭代器,是无法使用copy等函数的. 例如下面的代码就是错误的: list ...

  5. Java笔记05-Collection、泛型、迭代器

    Java笔记05-Collection.泛型.迭代器 [Collection.泛型] 主要内容 Collection集合 迭代器 增强for 泛型 第一章 Collection集合 1.1 集合概述 ...

  6. 迭代器适配器{(插入迭代器back_insert_iterator)、IO流迭代器(istream_iterator、ostream_iterator)}...

    一.迭代器适配器 反向迭代器 插入迭代器 IO流迭代器 其中反向迭代器可以参考以前的文章. 二.插入迭代器 插入迭代器实际上是一个输出迭代器(*it=; ++) back_insert_iterato ...

  7. 2021-06-19复习java Collection集合 Iterator接口_迭代器 增强for循环 泛型

    2021-06-19复习java Collection集合 Iterator接口_迭代器 增强for循环 泛型 Collection集合 java.util.coLlection接口 所有单列集合的最 ...

  8. C++ STL front_inserter back_inserter inserter 插入型迭代器的正确打开方式

    #include <iostream> #include <deque> #include <algorithm> #include <iterator> ...

  9. 【java笔记】Iterator迭代器 增强for

    Iterator接口: 接口java.util.Iterator遍历集合中的所有元素.Iterator对象主要用于遍历Collection中的元素,因此Iterator对象也被称为迭代器 迭代: Co ...

最新文章

  1. 2018-03-03-解决win下凭据删除不干净而无法登录共项目录的问题
  2. IOS8 PUSH解决方法
  3. lightoj-1028 Trailing Zeroes (I)
  4. 学院选人的时候会考虑博士和硕士的比例
  5. 串口、COM口、TTL和RS-232的区别详解
  6. 用 git 同步 Colab 与 Gitlab、Github 之间的文件
  7. 解决debug JDK source无法查看局部变量的问题
  8. 基于Python-turtle库绘制小猪佩奇、小猫咪
  9. 高并发高流量网站架构[转]
  10. C/C++文件指针偏移
  11. 金仓数据库-java连接金仓数据库方法笔记
  12. 环境微生物学试题库(1-10)
  13. xssgame第六关至第八关
  14. linux内核驱动使用hugepages,使用HugePages优化内存性能
  15. 1.认识华为数据通信
  16. 安装perf后,执行perf命令报错。
  17. 画一个椭圆c语言程序,画椭圆 - c代码库 - 云代码
  18. 透视HTTP协议(一) —— HTTP是什么
  19. 区块链与新零售的结合
  20. win7开机弹计算机,win7开机弹出Windows Installer窗口的解决方法

热门文章

  1. Error:Execution failed for task ':app:transformClassesWithDexForDebug'解决记录
  2. 基于JAVA+Swing的仓库管理系统
  3. 基于JAVA+SpringBoot+Mybatis+MYSQL的电影院管理系统
  4. 基于JAVA+SpringMVC+MYSQL的学生信息管理系统
  5. 2018百度之星资格赛:1002:子串查询
  6. A. 面向对象思想介绍
  7. Webservice学习之——即时发布与定制发布
  8. 70个经典的 Shell 脚本面试问题
  9. 深浅拷贝的应用-copy、mutableCopy
  10. 【转】Java垃圾收集器