这几种iterator一般用于copy类型的函数,如sort_copy, copy, unique_copy,因为copy系列的函数不检查dest参数的有效性,即是否已经分配了内存

#include <algorithm>
#include <functional>
#include <vector>
#include <iterator>template<class T>
void print(T &vec)
{for(auto iter=vec.begin(); iter != vec.end(); ++iter){cout<<*iter<<"\t";}cout<<endl;
}int main(int argc, char **argv)
{int array1[] = {10, -7, 3, 4, 4, -7};vector<int> myset(array1, array1+sizeof(array1)/sizeof(int));myset.push_back(4);vector<int> vec(myset.begin(), myset.end());//std::sort(vec.begin(), vec.end(), [&] (int a, int b){return a>b;});std::sort(vec.begin(), vec.end(), less<int>());list<int> newVec;//newVec.push_back(100);std::unique_copy(vec.begin(), vec.end(), inserter(newVec, newVec.begin()), equal_to<int>());(1)print(newVec);newVec.clear();std::unique_copy(vec.begin(), vec.end(), front_inserter(newVec), equal_to<int>());(2)print(newVec);newVec.clear();std::unique_copy(vec.begin(), vec.end(), inserter(newVec, newVec.end()), equal_to<int>());print(newVec);newVec.clear();std::unique_copy(vec.begin(), vec.end(), back_inserter(newVec), equal_to<int>());print(newVec);return 0;
}

结果如下所示:

需要注意的问题是

1、front_insert_iterator 总是把元素插入到container的最前面,调用的是container的push_front

2、back_insert_iterator总是把元素插入到container的最后面,调用的是container的push_back

3、insert_iterator< >(container, iter)把元素插入到iter之后,调用的是container的push_back

4、front_inserter(container)与inserter(container, container.begin())并不等价,前者每次执行++iter调用的是push_front,而后者调用的是push_back,可以比较(1)和(2)的结果

back_inserter front_inserter inserter的用法相关推荐

  1. 标准模板库STL(Standard Template Library)

    标准模板库STL(Standard Template Library)指南 /*刘振飞liuzf@pku.org.cn 1999-10-20*/ / *版权所有 (C) 1999-2004 刘振飞li ...

  2. STL——配接器(adapters)

    一.配接器 <Design Patterns>一书提到23个最普及的设计模式,其中对adapter样式的定义如下:将一个class的接口转换为另一个class 的接口,使原本因接口不兼容而 ...

  3. 【C++】C++中的迭代器

    目录结构: contents structure [-] 迭代器的运算 迭代器的运算符 begin和end操作符 迭代器的类型有那些 常用迭代器 容器的迭代器 插入迭代器 流迭代器 反向迭代器 迭代器 ...

  4. C++ primer笔记

    序:Goole C++ style Guide: 无符号与带符号线程的结果会把带符号当成无符号计算 p17:带.h会使用C的标准库文件,部分IDE不支持C++程序带.h头文件 可以使用nullptr代 ...

  5. C++11迭代器专栏详解

    c++迭代器详解 迭代器介绍 初步使用迭代器 所有迭代器都支持的运算符 迭代器类型 迭代器范围 使用左闭合范围蕴含的编程假定 迭代器的类别 为什么这样分类? 输入迭代器(input iterator) ...

  6. Essential C++读书笔记

    Essential C++读书笔记 一.C++编程基础 1.对象初始化(两种不同的初试化语法) int num_tries = 0, num_right = 0 int num_tries(0)//构 ...

  7. 《EffcativeSTL》

    定义.使用和扩展STL 没有"STL"的官方定义,在本书中,"STL"的意思是与迭代器合作的C++标准库的一部 分.那包括标准容器(包括string),iost ...

  8. 《EfficativeSTL》

    定义.使用和扩展STL 没有"STL"的官方定义,在本书中,"STL"的意思是与迭代器合作的C++标准库的一部 分.那包括标准容器(包括string),iost ...

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

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

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

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

最新文章

  1. new二维数组的几种方法
  2. 28天打造专业红客(一)
  3. oracle安装清单过不去,oracle 11g(二)安装过程
  4. Kaggle上主要有两大方法:梯度提升机和深度学习
  5. boost::histogram::axis::option用法的测试程序
  6. android 系统ui修改器,分享两个效果 - Android 系统 UI 管理
  7. 前端学习(684):循环导读
  8. 南风表情包小程序完整版源码 后台API+前端
  9. iis如何处理并发请求
  10. Scrapy框架学习笔记:猫眼爬虫
  11. AI 框架部署方案之模型转换
  12. 最新最全的 SQL 入门教程,老少皆宜,强烈推荐!
  13. 2022年最新的百度云盘在线倍速播放实践可用
  14. 周末浅说--未将对象引用设置到对象的实例(System.NullReferenceException)
  15. 3DMine安装教程(附详细图文安装步骤)
  16. 大一第一学期c语言考试题及答案,大一c语言试题及答案.doc
  17. Shell之判断周几
  18. 计算机应用中双绞线细铜线几根,《计算机应用基础_在线作业_E100.doc
  19. 国外java_Java开发必知道的国外10大网站
  20. SkeyeRTSPLive传统视频监控互联网实现利器解决方案

热门文章

  1. 【学习记录】名词和名词性从句
  2. 一个简单的java代码,输入当前星期,输出今天是星期几
  3. iOS URL Scheme
  4. 在Outlook中使用Notes功能的入门指南
  5. HDU 3966(树链剖分)
  6. 中国工具类App折戟海外,为什么只有猎豹移动杀出血路?
  7. 基于zynq的千兆网udp项目_米联客 ZYNQ/SOC 精品教程 S05-CH03-UDP千兆光通信
  8. Oracle的SQL注入
  9. PgAdmin出现Utility file not found. Please correct the Binary Path in the Preferences dialog的解决办法
  10. PUN☀️八、拓展网络同步:RPCs 和 Properties