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 三种插入迭代器的应用

  1. int main()
  2. {
  3. int array[] = { ,,,,, };
  4. vector<int> iVec(begin(array), end(array));
  5. vector<int> iVec_back;
  6. deque<int> iDeque_front;
  7. list<int> iList_inserter;
  8.  
  9. copy(iVec.begin(), iVec.end(), back_inserter(iVec_back));
  10. copy(iVec.begin(), iVec.end(), front_inserter(iDeque_front));
  11. copy(iVec.begin(), iVec.end(), inserter(iList_inserter, iList_inserter.begin()));
  12.  
  13. system("pause");
  14. }

习题10.27

  1. int main()
  2. {
  3. int array[] = { -, , , , , -, , -, };
  4. vector<int> iVec(begin(array), end(array));
  5. vector<int> iVecUnique;
  6. //元素排序,为拷贝不重复的元素做准备
  7. stable_sort(iVec.begin(), iVec.end());
  8. //拷贝不重复的元素到iVecUnique
  9. unique_copy(iVec.begin(), iVec.end(), back_inserter(iVecUnique));
  10.  
  11. system("pause");
  12. }

10.4.2 iostream迭代器

主要目的是使用算法操作流迭代器。

习题10.30 标准流迭代器的应用

  1. int main()
  2. {
  3. istream_iterator<int> in_ite(cin); //定义输入流迭代器,并绑定标准输入流
  4. istream_iterator<int> in_end; //定义尾后迭代器,没有数据读入时迭代器就为尾后迭代器
  5. ostream_iterator<int> out_iter(cout); //定义输出流迭代器,并绑定标准输出流
  6. vector<int> iVec;
  7. copy(in_ite, in_end, back_inserter(iVec));
  8. sort(iVec.begin(), iVec.end());//排序
  9. copy(iVec.begin(), iVec.end(), out_iter);//输出到与 out_iter 绑定的标准输出设备
  10. system("pause");
  11. }

习题 10.29 使用流迭代器读取文件

  1. int main()
  2. {
  3. ifstream ifstrm("h:\\1.txt"); //定义文件输入流
  4. istream_iterator<string> in_iter(ifstrm); //定义IO类的输入迭代器,并绑定ifstrm
  5. istream_iterator<string> in_end; //定义尾后迭代器,没有数据读入时迭代器就为尾后迭代器
  6. vector<string> strVec;
  7. copy(in_iter, in_end, back_inserter(strVec)); //利用copy算法将文件中的内容放到容器,以单词为组
  8.  
  9. system("pause");
  10. }

10.4.3反向迭代器

  1. //假定有一个名为 line 的string,保存着一个逗号分隔的单词列表,我们希望打印line中的第一个单词和最后一个单词,则分别用正向迭代器和逆向迭代器
  2. int main()
  3. {
  4. string line = "first,middle,last";
  5. auto comma = find(line.cbegin(), line.cend(), ','); //查找第一个逗号
  6. cout << string(line.cbegin(), comma) << endl;
  7.  
  8. //打印最后一个单词
  9. auto rcomma = find(line.crbegin(), line.crend(), ','); //查找最后一个逗号
  10. cout << string(line.crbegin(), rcomma) << endl; //错误,输出 tsal 是逆序的
  11. //cout << string(rcomma, line.crbegin()) << endl; //错误,rcomma是一个逆向迭代器,而line.crbegin()返回尾后字符,所以会溢出
  12. cout << string(rcomma.base(), line.end()) << endl; //正确,反向迭代器调用base()函数会返回普通迭代器,注意调用后指向不同的元素,会移动一位
  13. system("pause");
  14. }

10.4 再探迭代器-插入/IO/反向的更多相关文章

  1. 【C++ Primer | 10】再探迭代器

    插入迭代器 1. 测试代码: #include<iostream> #include<vector> #include<list> #include<iter ...

  2. 【C++ Primer 第10章】再探迭代器

    反向迭代器 • 反向迭代器就是在容器中从尾元素向首元素反向移动的迭代器.对于反向迭代器,递增(以及递减)操作的含义会颠倒过来. • 递增一个反向迭代器(++it)会移动到前一个元素:递减一迭代器(-- ...

  3. C++ Primer :第十章 :泛型算法之再探迭代器以及其他算法

    除了为每个容器定义的迭代器之外,标准库在头文件<iterator>还定义了额外集中迭代器, 包括: 插入迭代器,这些迭代器被绑定到一个容器上,可以向容器插入元素. 流迭代器,    这些迭 ...

  4. c++再探string之eager-copy、COW和SSO方案

    在牛客网上看到一题字符串拷贝相关的题目,深入挖掘了下才发现原来C++中string的实现还是有好几种优化方法的. 原始题目是这样的: 关于代码输出正确的结果是()(Linux g++ 环境下编译运行) ...

  5. 再探jQuery

    再探jQuery 前言:在使用jQuery的时候发现一些知识点记得并不牢固,因此希望通过总结知识点加深对jQuery的应用,也希望和各位博友共同分享. jQuery是一个JavaScript库,它极大 ...

  6. C++ Primer 学习笔记_44_STL实践与分析(18)--再谈迭代器【下】

    STL实践与分析 --再谈迭代器[下] 三.反向迭代器[续:习题] //P355 习题11.19 int main() { vector<int> iVec; for (vector< ...

  7. C++ Primer 学习笔记_43_STL实践与分析(17)--再谈迭代器【中】

    STL实践与分析 --再谈迭代器[中] 二.iostream迭代[续] 3.ostream_iterator对象和ostream_iterator对象的使用 能够使用ostream_iterator对 ...

  8. 【再探backbone 02】集合-Collection

    前言 昨天我们一起学习了backbone的model,我个人对backbone的熟悉程度提高了,但是也发现一个严重的问题!!! 我平时压根没有用到model这块的东西,事实上我只用到了view,所以昨 ...

  9. 再探java基础——break和continue的用法

    再探java基础——break和continue的用法 break break可用于循环和switch...case...语句中. 用于switch...case中: 执行完满足case条件的内容内后 ...

随机推荐

  1. rm -rf python 实现 v0.1

    #coding=utf- import os def join(arr,join_falg): res = "" for a in arr: res += a+join_falg ...

  2. Python中的三元运算符

    Python中的三元运算符 对于如下需求: if var1>1 : goal = "执行表达式1" else: goal = "执行表达式2" 1.在其他 ...

  3. ZOJ 3886 Nico Number(筛素数+Love(线)Live(段)树)

    problemCode=3886">ZOJ 3886 题意: 定义一种NicoNico数x,x有下面特征: 全部不大于x且与x互质的数成等差数列,如x = 5 ,与5互素且不大于5的数 ...

  4. linux环境,通过rpm删除mysql包,报错:error reading information on service mysqld: Invalid argument

    问题描述: 今天在做saltstack的练习,想要通过sls的方式,在远程进行mysql数据库的安装,发现无法通过service的方式启动数据库,然后就想给删除了重新进行安装,在通过rpm -e进行删 ...

  5. Javascript中Promise对象的实现

    http://segmentfault.com/a/1190000000684654 http://www.infoq.com/cn/news/2011/09/js-promise/

  6. GCH实践经验

    服务器: 终端整机: 办公套件: 杀毒软件: 打印机:

  7. 阿里云负载均衡SLB 七层https协议 nginx 获取真实IP

    https://www.cnblogs.com/baylorqu/p/8565667.html https://help.aliyun.com/document_detail/54007.html

  8. python数据库操作

    python操作数据库应该比java更简单些,连接数据库需要有驱动,pcat就推荐自己遇到的3个模块:mysql.connector.sqlalchemy.MySQLdb

  9. 关于js执行机制的理解

    js是单线程语言.指的是js的所以程序执行通过仅有的这一个主线程来执行. 但是还有辅助线程,包括定时器线程,ajax请求线程和事件线程. js的异步我理解的是: 主线程执行时候,从上到下依次执行,遇到 ...

  10. PHP(方法 函数 循环 和 数组 查找)

    循环 和 数组 查找 顺序查找 二分法查找 冒泡排序 方法 函数 定义:一堆代码的集合叫做函数(满足条件下“一堆”) 语法,定义,调用,参数列表(形参,实参),返回值 两种方法: function 方 ...