10.4 再探迭代器-插入/IO/反向
10.4.1 插入迭代器
插入迭代器接受一个容器,生成一个迭代器,通过向该迭代器赋值可以实现向容器添加元素
(1)back_inserter:
接受一个参数,
示例:
auto iter = back_inserter(iVec);
iter = value;
(2)front_inserter:
接受一个参数,
示例:
auto iter = front_inserter(iVec);
iter = value;
(3)inserter:
接受两个参数,示例:auto iter = inserter(iVec, it); //it必须是一个指向iVec的迭代器,
iter = value; //将value插入到it之前
习题 10.28 三种插入迭代器的应用
![](/assets/blank.gif)
![](/assets/blank.gif)
int main() {int array[] = { 1,2,3,4,5,6 };vector<int> iVec(begin(array), end(array));vector<int> iVec_back;deque<int> iDeque_front;list<int> iList_inserter;copy(iVec.begin(), iVec.end(), back_inserter(iVec_back));copy(iVec.begin(), iVec.end(), front_inserter(iDeque_front));copy(iVec.begin(), iVec.end(), inserter(iList_inserter, iList_inserter.begin()));system("pause"); }
View Code
习题10.27
![](/assets/blank.gif)
![](/assets/blank.gif)
int main() {int array[] = { -2, 6, 1, 6, 5, -9, 4, -2, 8 };vector<int> iVec(begin(array), end(array));vector<int> iVecUnique;//元素排序,为拷贝不重复的元素做准备 stable_sort(iVec.begin(), iVec.end());//拷贝不重复的元素到iVecUnique unique_copy(iVec.begin(), iVec.end(), back_inserter(iVecUnique));system("pause"); }
View Code
10.4.2 iostream迭代器
主要目的是使用算法操作流迭代器。
习题10.30 标准流迭代器的应用
![](/assets/blank.gif)
![](/assets/blank.gif)
int main() {istream_iterator<int> in_ite(cin); //定义输入流迭代器,并绑定标准输入流istream_iterator<int> in_end; //定义尾后迭代器,没有数据读入时迭代器就为尾后迭代器ostream_iterator<int> out_iter(cout); //定义输出流迭代器,并绑定标准输出流vector<int> iVec;copy(in_ite, in_end, back_inserter(iVec));sort(iVec.begin(), iVec.end());//排序copy(iVec.begin(), iVec.end(), out_iter);//输出到与 out_iter 绑定的标准输出设备system("pause"); }
View Code
习题 10.29 使用流迭代器读取文件
![](/assets/blank.gif)
![](/assets/blank.gif)
int main() { ifstream ifstrm("h:\\1.txt"); //定义文件输入流istream_iterator<string> in_iter(ifstrm); //定义IO类的输入迭代器,并绑定ifstrmistream_iterator<string> in_end; //定义尾后迭代器,没有数据读入时迭代器就为尾后迭代器vector<string> strVec;copy(in_iter, in_end, back_inserter(strVec)); //利用copy算法将文件中的内容放到容器,以单词为组 system("pause"); }
View Code
10.4.3反向迭代器
![](/assets/blank.gif)
![](/assets/blank.gif)
//假定有一个名为 line 的string,保存着一个逗号分隔的单词列表,我们希望打印line中的第一个单词和最后一个单词,则分别用正向迭代器和逆向迭代器 int main() { string line = "first,middle,last";auto comma = find(line.cbegin(), line.cend(), ','); //查找第一个逗号cout << string(line.cbegin(), comma) << endl;//打印最后一个单词auto rcomma = find(line.crbegin(), line.crend(), ','); //查找最后一个逗号cout << string(line.crbegin(), rcomma) << endl; //错误,输出 tsal 是逆序的//cout << string(rcomma, line.crbegin()) << endl; //错误,rcomma是一个逆向迭代器,而line.crbegin()返回尾后字符,所以会溢出cout << string(rcomma.base(), line.end()) << endl; //正确,反向迭代器调用base()函数会返回普通迭代器,注意调用后指向不同的元素,会移动一位system("pause"); }
View Code
转载于:https://www.cnblogs.com/liyubo/p/7868754.html
10.4 再探迭代器-插入/IO/反向相关推荐
- C++primer第十章 泛型算法 10.4 再探迭代器 10.5 泛型算法结构
除了为每个容器定义的迭代器之外,标准库在头文件iterator中还定义了额外几种迭代器.这些迭代器包括以下几种. 插入迭代器(insert iterator):这些迭代器被绑定到一个容器上,可用来向容 ...
- 再探C#类与结构体究竟谁快——考虑栈变量、栈分配、64位整数、密封类
上次我对C#类与结构体做了一次速度评测(http://blog.csdn.net/zyl910/article/details/6788417).经过一段时间思索,发现还可以进一步探讨-- 第一.栈变 ...
- RxSwift学习--核心逻辑再探
前言 通过上一篇内容RxSwift学习--核心逻辑初探,对RxSwift有了些初步的认知,下面通过源码来看一下RxSwift到底有多骚 RxSwift核心逻辑再探 先把上篇中的例子代码搬过来: //第 ...
- 【CTF大赛】2021 DASCTF July cybercms 一探再探
引言 在前不久结束的 2021 DASCTF July X CBCTF 4th 比赛中,有一道名为 cybercms 的 web 题目. 预期解是从后台登录处进行 SQL 注入写入一句话木马,然而咱在 ...
- 函数重载、引用再探、内联函数
文章目录 函数重载 为什么C++支持重载,C语言不支持呢? extern "C" 引用再探 引用的特性 引用的使用场景 引用和指针 引用和指针的不同点: 内联函数 什么是内联函数? ...
- 【再探backbone 02】集合-Collection
前言 昨天我们一起学习了backbone的model,我个人对backbone的熟悉程度提高了,但是也发现一个严重的问题!!! 我平时压根没有用到model这块的东西,事实上我只用到了view,所以昨 ...
- C++Primer 第10章 bind与迭代器
C++Primer 第10章 bind与迭代器 //10.20,10.22 #include<iostream> #include<vector> #include<st ...
- 自制深度学习推理框架-第十一节-再探Tensor类并构建计算图的图关系
自制深度学习推理框架-第十一节-再探Tensor类并准备算子的输入输出 本课程介绍 我写了一个<从零自制深度学习推理框架>的课程,课程语言是 C++,课程主要讲解包括算子实现和框架设计的思 ...
- 再探MS-SAMR协议
再探MS-SAMR协议 作者:Loong716@Amulab 0x00 前言 在前一篇<利用MS-SAMR协议修改用户密码>中介绍了利用MS-SAMR修改用户密码并还原的技巧.在本篇文章中 ...
最新文章
- 【公开课预告】:六款开源LL-HLS/LL-DASH播放器评测
- X-Mas Musings –在Grails集成测试中不要使用随机服务器端口
- android build获取ext,顶级build.gradle文件中的ext属性
- nivdia错误0x0003_超全解决Geforce 错误代码 ERROR CODE:0x0003问题方法
- Win10安装配置CLion+MinGW
- 谈demo、原型、产品的区别
- 【TPshop踩雷篇 — 数据库连接配置失败】
- Python爬虫有用的库:chardet,自动检测字符编码
- vue富文本编辑器中上传图片
- MAC全局安装yarn
- SAP ABAP Loop…Assigning与Loop…Into的比较
- 一步一步SharePoint 2007之一:安装SharePoint
- python编程入门第一课_[转载]Python第一课教学设计及反思
- MT7628实现Amazon alexa语音控制
- html实现波浪,纯CSS实现波浪移动效果的示例
- 2020第二周美赛感想
- 计算机开机黑屏并有报警声,开机报警5声,开机黑屏报警8声
- ISTQB-TM-大纲
- 在线纯音听力测试软件,纯音听力测试
- 微软认证系统工程师(MCSE)