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. config之安全(用户认证)

    config server 端: 配置账号密码: 那么config client如何连接带有认证的config server呢? 假设两个同时使用,属性的优先级比uri的优先级高.

  2. linux那些事

    useradd -m -d /home/changp -Gusers,dialout,video account_name 创建新的账号 passwd account_name 修改指定账号的密码

  3. php获取星期几周几

    PHP星期几获取代码: date("l"); //data就可以获取英文的星期比如Sundaydate("w"); //这个可以获取数字星期比如123,注意0是 ...

  4. python---基础知识回顾(十)进程和线程(协程gevent:线程在I/O请求上的优化)

    优点:使用gevent协程,可以更好的利用线程资源.(基于线程实现) 需求:使用一个线程,去请求多个网站的资源(注意,请求上会有延时)<实际上是去请求了大量的网站信息,我们使用了多线程,只不过每 ...

  5. angularJS__v1.5.6点击同一个菜单刷新

    针对angularjs的1.0版本,点击菜单不刷新问题,只需在配置路由时,路由路径添加“/”,如,点击 标签时,就会刷新,

  6. go build 不同系统下的可执行文件

    Golang 支持在一个平台下生成另一个平台可执行程序的交叉编译功能. 1.Mac下编译Linux, Windows平台的64位可执行程序: 1 2 $ CGO_ENABLED=0 GOOS=linu ...

  7. mysql数据库脚本改为oracle脚本

    前段时间公司项目数据库需要从mysql转为oracle,所以需要修改下原有的mysql脚本. 有两种方式:第一种,使用工具进行两种数据库的转换.第二种,手动修改数据库脚本. 第二种方法很笨,但能学习下 ...

  8. soj1049.Mondriaan

    1049. Mondriaan Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description Squares and rectangl ...

  9. Spring3.2 Contorller单元测试参数问题: java.lang.NoSuchMethodException

    使用3.2做单元测试的时候发现这个问题,因为之前都是用3.0中的配置适配器使用AnnotationMethodHandlerAdapter,到3.2中升级为RequestMappingHandlerA ...

  10. Presto通过RESTful接口新增Connector

    在实际使用Presto的过程中,经常会有以下的一些需求. 添加一个新的Catalog 对不再使用的Catalog希望把它删除 修改某个Catalog的参数 但在Presto中如果进行上述的修改,需要重 ...