除了普通迭代器,C++标准模板库还定义了几种特殊的迭代器,分别是插入迭代器、流迭代器、反向迭代器和移动迭代器,定义在<iterator>头文件中,下面主要介绍三种插入迭代器(back_inserter,inserter,front_inserter)的区别。 
首先,什么是插入迭代器?插入迭代器是指被绑定在一个容器上,可用来向容器插入元素的迭代器。 
back_inserter:创建一个使用push_back的迭代器 
inserter:此函数接受第二个参数,这个参数必须是一个指向给定容器的迭代器。元素将被插入到给定迭代器所表示的元素之前。 
front_inserter:创建一个使用push_front的迭代器(元素总是插入到容器第一个元素之前) 
由于list容器类型是双向链表,支持push_front和push_back操作,因此选择list类型来试验这三个迭代器。

std::vector<int> v1(, );
std::vector<int> v2(, );
std::copy(v1.begin(), v1.end(), v2.begin());
std::vector<int> v3();
//下列这行代码会导致程序崩溃,因为目标容器v3的大小必须大于等于源容器的大小v1
//std::copy(v1.begin(), v1.end(), v3.begin());
//为了解决这个问题可以使用std::back_inserter()函数。
std::copy(v1.begin(), v1.end(), std::back_inserter(v3));
//用法及区别
list<int> lst = { , , , , , , , , };
list<int> lst2 ={}, lst3={},lst4={};
copy(lst.cbegin(), lst.cend(), back_inserter(lst2));
//lst2包含10,1,2,3,4,5,6,7,8,9
copy(lst.cbegin(), lst.cend(), inserter(lst3, lst3.begin()));
//lst3包含1,2,3,4,5,6,7,8,9,10
copy(lst.cbegin(), lst.cend(), front_inserter(lst4));
//lst4包含9,8,7,6,5,4,3,2,1,10

由示例便可轻易看出这三者的区别了。

最新文章

  1. 关于面试别问及Spring如何回答思路总结!
  2. java UDP
  3. Java web--反射(解刨)
  4. 二十、【.Net开源】EFW框架核心类库之WebService服务
  5. CruiseControl.Net学习记录
  6. Eclipse中安装可以新建html文件的插件(Eclipse HTML Editor)
  7. 在 Canvas 中绘制扇形
  8. HDU 1540 POJ 2892 Tunnel Warfare
  9. 常用js类型相互转换
  10. 动态样式语言—LESS
  11. Understanding and Using HRMS Security in Oracle HRMS
  12. 自然语言处理(nlp)比计算机视觉(cv)发展缓慢,而且更难!
  13. Linux内存管理 (20)最新更新和展望
  14. HTML5外包注意事项-开发HTML5游戏的九大坑与解决方法剖析
  15. ubuntu-14.04安装最新tensorflow记录
  16. 51Nod 最小公倍数之和V3
  17. armv8 memory system
  18. Controller Plane
  19. Nginx 域名重定向
  20. Map实现java缓存机制的简单实例

热门文章

  1. STC12LE5620AD RAM问题
  2. 绘图驱动-OSD原理2
  3. python Web开发之 WSGI &amp; uwsgi &amp; uWSGI
  4. REST解惑
  5. 一点一点看JDK源码(五)java.util.ArrayList 后篇之Spliterator多线程遍历
  6. ArrayList的去重问题
  7. DQL-子查询
  8. iOS- CoreData 数据库管理利器!
  9. 19-3-6Python中字典的解释、使用、嵌套
  10. JS原生评分组件