标准库 插入迭代器 详解

插入迭代器作用:copy等函数不能改变容器的大小,所以有时copy先容器是个空的容器,如果不使用插入迭代器,是无法使用copy等函数的。

例如下面的代码就是错误的:

list<int> lst{1,2,3,4}; list<int> lst2,lst3;
copy(lst.cbegin(), lst.cend(), lst2.begin());

lst2是个空的容器,copy函数不能扩容容器lst2,所以会发生运行时错误。

用插入迭代器就可以很好的解决上面的问题

list<int> lst{1,2,3,4}; list<int> lst2,lst3;
copy(lst.cbegin(), lst.cend(), inserter(lst3, lst3.begin()));

三种插入迭代器

迭代器 功能描述
back_inserter 创建一个使用push_back的迭代器
front_inserter 创建一个使用push_front的迭代器
inserter 创建一个使用insert的迭代器,元素插入到指定位置之前

inserter的特殊之处:

//假设it是有inserter生成的迭代器
*it = val;//其效果同下面二行代码一样
it = c.insert(it, val);//it指向新加入的元素
++it;//递增it,使它指向原来的元素

例子:

#include <iostream>
#include <vector>
#include <list>
#include <algorithm>using namespace std;int main(){//copy函数不会改变容器的大小,但是使用了插入迭代器后,                        //就会改变容器的大小了                                                        /*                                                                            list<int> lst{1,2,3,4};                                                       list<int> lst2,lst3;                                                          //运行错误,因为lst2是空list,copy函数不会增加容器的大小                       //copy(lst.cbegin(), lst.cend(), lst2.begin()); //结果:4,3,2,1copy(lst.cbegin(), lst.cend(), front_inserter(lst2));         //结果:1,2,3,4                copy(lst.cbegin(), lst.cend(), inserter(lst3, lst3.begin()));                 for(auto const &s : lst2){                                                    cout << s << " ";                                                           }                                                                             cout << endl;                                                                 for(auto const &s : lst3){                                                    cout << s << " ";                                                           }                                                                             cout << endl;                                                                 *///unique_copy 拷贝不重复的元素到新的容器                              vector<int> ivec{1,2,1,2,3,4,3,3,3,2,2,1,1,1};list<int> lst;sort(ivec.begin(),ivec.end());unique_copy(ivec.cbegin(), ivec.cend(),back_inserter(lst));for(auto const &s : lst){cout << s << " ";}cout << endl;}

c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854

转载于:https://www.cnblogs.com/xiaoshiwang/p/9684515.html

c/c++ 标准库 插入迭代器 详解相关推荐

  1. bind() c语言,c/c++ 标准库 bind 函数详解

    bind函数定义在头文件 functional 中.可以将 bind 函数看作一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来"适应"原对象的参数列表. bin ...

  2. c语言中bind函数,c/c++ 标准库 bind 函数详解

    bind函数定义在头文件 functional 中.可以将 bind 函数看作一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来"适应"原对象的参数列表. bin ...

  3. pillow属于python标准库吗_详解Python图像处理库Pillow常用使用方法

    PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了. 其官方主页为:PIL. PIL ...

  4. C++的iostream标准库介绍+使用详解(转)

    0 为什么需要iostream 我们从一开始就一直在利用C++的输入输出在做着各种练习,输入输出是由iostream库提供的,所 以讨论此标准库是有必要的,它与C语言的 stdio库不同,它从一开始就 ...

  5. linux下c标准库位置,C 标准库 IO 使用详解

    其实输入与输出对于不管什么系统的设计都是异常重要的,比如设计 C 接口函数,首先要设计好输入参数.输出参数和返回值,接下来才能开始设计具体的实现过程.C 语言标准库提供的接口功能很有限,不像 Pyth ...

  6. Python 标准库 functools 模块详解

    functools 官方文档:https://docs.python.org/zh-cn/3/library/functools.html Python 标准模块 --- functools:http ...

  7. time库是python中处理时间的标准库_python语言time库和datetime库基本使用详解

    今天是边复习边创作博客的第三天,我今年大二,我们专业开的有这门课程,因为喜欢所以更加认真学习,本以为没人看呢,看了后台浏览量让我更加认真创作,这篇博客花了2个半小时的时间,结合自己所学,所思,所想写作 ...

  8. Node.js中package.json中库的版本号详解(^和~区别)

    Node.js中package.json中库的版本号详解(^和~区别) 当我们查看package.json中已安装的库的时候,会发现他们的版本号之前都会加一个符号,有的是插入符号(^),有的是波浪符号 ...

  9. Python计时库——Time库的使用详解

    今天继续给大家介绍Python相关知识,本文主要内容是Python计时库--Time库的使用详解. 一.Python Time库简介 time库是Python的标准库之一,主要用来系统级别的精确计时, ...

最新文章

  1. k均值聚类算法考试例题_K-均值聚类法实例解析
  2. 回收站功能在 Linux 中的实现
  3. mysql视图知识点_MySql知识点汇总--笔经面经
  4. jsp页面模块的来源
  5. java 对话框 显示图片_Java对话框上显示图片
  6. 【ES6(2015)】Array数组
  7. datetime方法
  8. SOA学习笔记001---SOA 服务架构之简介及理解
  9. java在线支付---04_编写易宝支付的客户端加密工具类
  10. 基于ASP.NET AJAX的WebPart开发与部署
  11. 站斧超级浏览器风控系统助力Lazada商家安全管理
  12. git 对比两个分支差异
  13. python 制作抽奖箱_海安当地横幅制作值得推荐,抽奖箱制作-漫谈
  14. 搭建zabbix监控及邮件报警
  15. 信号系统一些基本概念
  16. python scapy网络嗅探
  17. 【CSS3 属性】CSS 3 transform:scale 与 transform:translate 作用在同一div元素,导致元素位置偏离
  18. 新中新SDK 身份证代码编写
  19. 别怕未来会把过去写旧【1】
  20. 【视频点播】阿里云视频点播如何获取视频播放的URL

热门文章

  1. centos7下没有iptables
  2. 本周学习进度表及时间安排(2018-1-7~2018-1-13)
  3. Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)
  4. JPA学习---第五节:日期和枚举等字段类型的JPA映射
  5. 免费猪八戒网站软件任务小助手--小八戒更新版本1.5
  6. 用linux搭建ntp服务,使用linux配置NTP Server
  7. find到带空格文件名用xargs处理的技巧
  8. Ubuntu常用快捷键
  9. leetcode算法题--Restore IP Addresses
  10. python webshell_python脚本实现查找webshell的方法