标准库 插入迭代器 详解
插入迭代器作用: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,1
copy(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
c/c++ 标准库 插入迭代器 详解的更多相关文章
-
c/c++ 标准库 bind 函数 详解
标准库 bind 函数 详解 bind函数:接收一个函数名作为参数,生成一个新的函数. auto newCallable = bind(callbale, arg_list); arg_list中的参 ...
-
C++的iostream标准库介绍+使用详解(转)
0 为什么需要iostream 我们从一开始就一直在利用C++的输入输出在做着各种练习,输入输出是由iostream库提供的,所以讨论此标准库是有必要的,它与C语言的 stdio库不同,它从一开始就是 ...
-
C++标准库vector类型详解
Vector简介 vector是定义在C++标准模板库,它是一个多功能.能够操作多种数据结构和算法的模板类(关于模板类我们后面会介绍,如何创建自己的模板类).vector是一个容器,能够像容器一样存放 ...
-
标准库bufio个人详解
本文是我有通俗的语言写的如果有误请指出. 先看bufio官方文档 https://studygolang.com/pkgdoc文档地址 主要分三部分Reader.Writer.Scanner 分别是读 ...
-
黑马----JAVA迭代器详解
JAVA迭代器详解 1.Interable.Iterator和ListIterator 1)迭代器生成接口Interable,用于生成一个具体迭代器 public interface Iterable ...
-
【Solr】索引库查询界面详解
目录 索引库查询界面详解 回到顶部 索引库查询界面详解 q:主查询条件.完全支持lucene语法.还进行了扩展. fq:过滤查询.是在主查询条件查询结果的基础上进行过滤.例如:product_pric ...
-
全网最全的Windows下Python2 / Python3里正确下载安装用来向微信好友发送消息的itchat库(图文详解)
不多说,直接上干货! 建议,你用Anaconda2或Anaconda3. 见 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装用来向微信好友发送消息的itchat库( ...
-
python中requests库使用方法详解
目录 python中requests库使用方法详解 官方文档 什么是Requests 安装Requests库 基本的GET请求 带参数的GET请求 解析json 添加headers 基本POST请求 ...
-
【Linux开发】Linux下jpeglib库的安装详解
Linux下jpeglib库的安装详解 首先要下载所需的库压缩包:jpegsrc.v6b.tar.gz或 jpegsrc.v8b.tar.gz 然后将下载的压缩包随便放在和解压到你喜欢的地方. # t ...
随机推荐
-
Three.js 第一篇:绘制一个静态的3D球体
第一篇就画一个球体吧 首先我们知道Three.js其实是一个3D的JS引擎,其中的强大之处就在于这个JS框架并不是依托于JQUERY来写的.那么,我们在写这一篇绘制3D球体的文章的时候,应该注意哪些地 ...
-
Android基础:startActivityForResult 和 onActivityResult 问题
项目中用到弹出Acitivity来获得用户输入 所以用到 onActivityResult()方法接受用户输入 奇怪问题 startActivityForResult() 后直接调用 onActivi ...
-
两种设置disabled属性以及三种方法移除disabled属性
//两种方法设置disabled属性 $('#areaSelect').attr("disabled",true); $('#areaSelect').attr("dis ...
-
Java原来如此-遍历Map的三种方法
import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; pub ...
-
Mac下MySQL的安装与配置
之前一直用的是阿里云的服务器,在服务器上装了一个MySQL,但是今天发现到期了,而且续费时发现之前的大学生优惠不能用了,可是明明到6月份,大学生才毕业啊,shit!!!所以没办法只能在自己电脑上装一个 ...
-
多边形剪裁img
<!DOCTYPE html><html><head> <meta charset="utf-8"/> <title>& ...
-
第53章 结束会话端点(End Session Endpoint) - Identity Server 4 中文文档(v1.0.0)
结束会话端点可用于触发单点注销(请参阅规范). 要使用结束会话端点,客户端应用程序会将用户的浏览器重定向到结束会话URL.用户在会话期间通过浏览器登录的所有应用程序都可以参与注销. 注意 终端会话端点 ...
-
Java scirpt简介
JavaScript 简介 JavaScript 是脚本语言 JavaScript 是一种轻量级的编程语言. JavaScript 是可插入 HTML 页面的编程代码. JavaScript 插入 H ...
-
批量telnet端口通不通
每读一行就运行一次telnet IP port #!/bin/bash port="22" cat *.txt | while read line do telnet ${line ...
-
jquery 实现 Json 的一些转换方法
有一个json 字符串 1)要判断该字符串是否是 json 格式 方法:将其转换成json对象,如果报异常,则不是,否则就是json格式 function isJsonFormat(str) { tr ...