c/c++ 标准库 插入迭代器 详解
标准库 插入迭代器 详解
插入迭代器作用: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++ 标准库 插入迭代器 详解相关推荐
- bind() c语言,c/c++ 标准库 bind 函数详解
bind函数定义在头文件 functional 中.可以将 bind 函数看作一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来"适应"原对象的参数列表. bin ...
- c语言中bind函数,c/c++ 标准库 bind 函数详解
bind函数定义在头文件 functional 中.可以将 bind 函数看作一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来"适应"原对象的参数列表. bin ...
- pillow属于python标准库吗_详解Python图像处理库Pillow常用使用方法
PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了. 其官方主页为:PIL. PIL ...
- C++的iostream标准库介绍+使用详解(转)
0 为什么需要iostream 我们从一开始就一直在利用C++的输入输出在做着各种练习,输入输出是由iostream库提供的,所 以讨论此标准库是有必要的,它与C语言的 stdio库不同,它从一开始就 ...
- linux下c标准库位置,C 标准库 IO 使用详解
其实输入与输出对于不管什么系统的设计都是异常重要的,比如设计 C 接口函数,首先要设计好输入参数.输出参数和返回值,接下来才能开始设计具体的实现过程.C 语言标准库提供的接口功能很有限,不像 Pyth ...
- Python 标准库 functools 模块详解
functools 官方文档:https://docs.python.org/zh-cn/3/library/functools.html Python 标准模块 --- functools:http ...
- time库是python中处理时间的标准库_python语言time库和datetime库基本使用详解
今天是边复习边创作博客的第三天,我今年大二,我们专业开的有这门课程,因为喜欢所以更加认真学习,本以为没人看呢,看了后台浏览量让我更加认真创作,这篇博客花了2个半小时的时间,结合自己所学,所思,所想写作 ...
- Node.js中package.json中库的版本号详解(^和~区别)
Node.js中package.json中库的版本号详解(^和~区别) 当我们查看package.json中已安装的库的时候,会发现他们的版本号之前都会加一个符号,有的是插入符号(^),有的是波浪符号 ...
- Python计时库——Time库的使用详解
今天继续给大家介绍Python相关知识,本文主要内容是Python计时库--Time库的使用详解. 一.Python Time库简介 time库是Python的标准库之一,主要用来系统级别的精确计时, ...
最新文章
- k均值聚类算法考试例题_K-均值聚类法实例解析
- 回收站功能在 Linux 中的实现
- mysql视图知识点_MySql知识点汇总--笔经面经
- jsp页面模块的来源
- java 对话框 显示图片_Java对话框上显示图片
- 【ES6(2015)】Array数组
- datetime方法
- SOA学习笔记001---SOA 服务架构之简介及理解
- java在线支付---04_编写易宝支付的客户端加密工具类
- 基于ASP.NET AJAX的WebPart开发与部署
- 站斧超级浏览器风控系统助力Lazada商家安全管理
- git 对比两个分支差异
- python 制作抽奖箱_海安当地横幅制作值得推荐,抽奖箱制作-漫谈
- 搭建zabbix监控及邮件报警
- 信号系统一些基本概念
- python scapy网络嗅探
- 【CSS3 属性】CSS 3 transform:scale 与 transform:translate 作用在同一div元素,导致元素位置偏离
- 新中新SDK 身份证代码编写
- 别怕未来会把过去写旧【1】
- 【视频点播】阿里云视频点播如何获取视频播放的URL
热门文章
- centos7下没有iptables
- 本周学习进度表及时间安排(2018-1-7~2018-1-13)
- Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)
- JPA学习---第五节:日期和枚举等字段类型的JPA映射
- 免费猪八戒网站软件任务小助手--小八戒更新版本1.5
- 用linux搭建ntp服务,使用linux配置NTP Server
- find到带空格文件名用xargs处理的技巧
- Ubuntu常用快捷键
- leetcode算法题--Restore IP Addresses
- python webshell_python脚本实现查找webshell的方法