1. #include<iostream>
  2. #include<vector>
  3. #include<list>
  4. #include<iterator>
  5. usingnamespace std;
  6. template<typename T>
  7. voidPrintElements(T c)
  8. {
  9. typename T::const_iterator itr = c.begin();//在GCC下typename不能省略
  10. while(itr != c.end())
  11. {
  12. cout <<*itr++<<" ";
  13. }
  14. cout << endl;
  15. }
  16. int main()
  17. {
  18. vector<int> vecSrc;
  19. list<int> vecDest;
  20. for(vector<int>::size_type i =0; i <3;++i)
  21. {
  22. vecSrc.push_back(i);
  23. }//--0,1,2---
  24. /**
  25. * 第一种方法是调用<iterator>头文件中的函数来返回一个back_insert_iterator对象
  26. * template< class Container >
  27. * std::back_insert_iterator<Container> back_inserter( Container& c );
  28. */
  29. /**
  30. * 第二种方法是调用back_insert_iterator类的构造函数来创建类对象
  31. * explicit
  32. * back_insert_iterator(_Container& __x) : container(&__x) { }
  33. */
  34. copy(vecSrc.begin(), vecSrc.end(), back_inserter(vecDest));
  35. //copy(vecSrc.begin(), vecSrc.end(), back_insert_iterator<list<int> >(vecDest));
  36. PrintElements(vecDest);//--0,1,2---
  37. copy(vecSrc.begin(), vecSrc.end(), front_inserter(vecDest));
  38. //copy(vecSrc.begin(), vecSrc.end(), front_insert_iterator<list<int> >(vecDest));
  39. PrintElements(vecDest);//--2,1,0,0,1,2---
  40. copy(vecSrc.begin(),vecSrc.end(), inserter(vecDest,++vecDest.begin()));
  41. //copy(vecSrc.begin(), vecSrc.end(), insert_iterator<list<int> >(vecDest, ++vecDest.begin()));
  42. PrintElements(vecDest);//--2,0,1,2,1,0,0,1,2---
  43. back_insert_iterator<list<int>> itBack = back_inserter(vecDest);//这里也可以直接调用构造函数
  44. *itBack =101;
  45. *itBack =102;//itBack每次都指向容器最后的元素
  46. PrintElements(vecDest);//.....101,102
  47. front_insert_iterator<list<int>> itFront = front_insert_iterator<list<int>>(vecDest);
  48. *itFront =1001;
  49. *itFront =1002;
  50. PrintElements(vecDest);//1002,1001......
  51. insert_iterator<list<int>> itIst = inserter(vecDest, vecDest.begin());
  52. *itIst =11;
  53. *itIst =12;
  54. PrintElements(vecDest);//--11,12,1002,1001.....
  55. // *itIst = value;相当于
  56. // itIst = c.insert(it,value);
  57. // ++itIst;
  58. // insert函数返回的是指向插入元素的迭代器,由于该函数是在给定迭代器之前插入元素,所以++itIst之后
  59. // itIst依然指向的是原来的元素。操作结束后itIst指向的位置未发生改变
  60. return0;
  61. }

 

C++之插入迭代器的更多相关文章

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

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

  2. 【C++ Primer 第10章】 10.4.1 插入迭代器

    目录 •  iostream迭代器 •  反向迭代器 插入迭代器 插入迭代器,这些迭代器被绑定到一个容器上,可以向容器插入元素. 头文件为:#include<iterator it=t 在it指 ...

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

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

  4. STL之--插入迭代器(back_inserter,inserter,front_inserter的区别)

    除了普通迭代器,C++标准模板库还定义了几种特殊的迭代器,分别是插入迭代器.流迭代器.反向迭代器和移动迭代器,定义在<iterator>头文件中,下面主要介绍三种插入迭代器(back_in ...

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

    1. 定义 插入型迭代器(Insert Iterator),又叫插入器(Inserter). 2. 作用 插入迭代器的主要功能为把一个赋值操作转换为把相应的值插入容器的操作.算法库对所有在容器上的操作 ...

  6. uva 12096 The SetStack Computer(STL set的各种库函数 交集 并集 插入迭代器)

    题意: 有5种操作: PUSH:加入“{}”空集合入栈. DUP:栈顶元素再入栈. UNION:出栈两个集合,取并集入栈. INTERSECT:出栈两个集合,取交集入栈. ADD:出栈两个集合,将先出 ...

  7. 【C++ Primer 第10章】 10.4.2 插入迭代器

    iostream迭代器 标准库为iostream定义了可用于这些IO类型对象的迭代器. istream_iterator读取输入流, ostream_iterator向一个输出流写数据.   1. i ...

  8. c++ insert iterators 插入型迭代器

    insert iterators 插入型迭代器 (1)front inserters 前向插入迭代器 只适用于提供有push_front()成员函数的容器,在标准程序库中这样的容器是deque和lis ...

  9. 10.4 再探迭代器-插入/IO/反向

    10.4.1 插入迭代器 插入迭代器接受一个容器,生成一个迭代器,通过向该迭代器赋值可以实现向容器添加元素 (1)back_inserter: 接受一个参数, 示例: auto iter = back ...

随机推荐

  1. xampp+vscode开发php的配置流程

    一.所需文件 1.xampp集成服务器(个人使用7.1.7)https://www.apachefriends.org/download.html 2.vscode https://code.visu ...

  2. jQuery常用知识总结

    jQuery常用知识总结 简介 选择器 属性操作 jQuery() each event事件 jQuery扩展 一.简介 What is jQuery jQuery is fast small and ...

  3. day3 程序流程控制

    今天主要学习了while和do/while,以及运用循环做一些小的练习. 学习了如何断点调试程序. 程序设计的步骤: 1.分析问题 2.确定数据结构和算法 3.编制程序 4.调试问题

  4. 互斥量、条件变量与pthread_cond_wait()函数的使用,详解(一)

    1. 首先pthread_cond_wait 的定义是这样的 The pthread_cond_wait() and pthread_cond_timedwait() functions are us ...

  5. vue 项目代码初始化

    1. <meta>补充 <head> <meta charset="utf-8"> <meta name="viewport&q ...

  6. bzoj千题计划148:bzoj1537: [POI2005]Aut- The Bus

    http://www.lydsy.com/JudgeOnline/problem.php?id=1537 朴素的转移:dp[i][j]=max(dp[i][j-1],dp[i-1][j])+p[i][ ...

  7. 贪心问题:区间覆盖 POJ 2376 Cleaning Shift

    题目:http://poj.org/problem?id=2376 题意:就是 N 个区间, 输入 N 个区间的 [begin, end],求能用它们覆盖区间[1,T]的最小组合. 题解: 1. 首先 ...

  8. Java并发编程原理与实战四十五:问题定位总结

    背景   “线下没问题的”. “代码不可能有问题 是系统原因”.“能在线上远程debug么”    线上问题不同于开发期间的bug,与运行时环境.压力.并发情况.具体的业务相关.对于线上的问题利用线上 ...

  9. LintCode 383: Max Area

    LintCode 383: Max Area 题目描述 给定 n 个非负整数 a1, a2, ..., an, 每个数代表了坐标中的一个点 (i, ai).画 n 条垂直线,使得 i 垂直线的两个端点 ...

  10. post请求远程url 报错“基础连接已经关闭...Authentication.AuthenticationException...远程证书无效”解决方案

    当我们有时用代码编写post请求url远程地址会报“基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系. ---> System.Security.Authentication.A ...