迭代器是算法和容器的桥梁

** 迭代器用作访问容器中的元素

** 算法不直接操作容器中的数据,而是通过迭代器间接操作

算法和容器独立

** 增加新的算法,无需影响容器的视线

** 增加新的容器,原有的算法也能适用

输入流迭代器和输出流迭代器:

*输入流迭代器

istream_iterator<T>

* 以输入流(如cin)为参数构造

* 可用* (p++)获得下一个输入的元素

*输出流迭代器

ostream_iterator<T>

* 构造时需要提供输出流(如cout)

* 可用(*p++)= x 将x输出到输出流

*二者都属于适配器

* 适配器是用来为已有对象提供新的接口的对象

* 输入流适配器和输出流适配器为流对象提供了迭代器的接口

例子:

#include <iostream>
#include <iterator>
#include <algorithm>using namespace std;double square(double x){return x * x;}int main(){transform(istream_iterator<double>(cin), istream_iterator<double>(), ostream_iterator<double>(cout,"\t"),square);cout << endl;return 0;
}

在上面的代码中,是为了实现平方功能,其中,transform()是一个算法,里面的 istream_iterator<double>(cin) 代表输入流迭代器,这一句里面的输入流迭代器代表开始是从cin 输入开始,结束于istream_iterator<double>(),结束于第一个空格,作为输出流迭代器输出,以square的形式输出。

迭代器的种类:

输入迭代器:可以用来从序列中读取数据,例如输入迭代器

输出迭代器:允许向序列中写入数据,例如输出流迭代器

前向迭代器:既是输入迭代器又是输出迭代器,并器可以对序列进行单向的遍历

双向迭代器:与前向迭代器相似,但是在两个方向上都可以对数据遍历

随机访问迭代器:也是双向迭代器,但能够在序列中的任意两个位置之间进行跳转,

例如指针,使用vector的begin(),end()函数得到的迭代器

迭代器的区间:

* 两个迭代器表示一个区间:[p1, p2)

* STL算法常以迭代器的区间作为输入,传递输入数据

*合法的区间:

* p1经过n次(n>0)自增(++)操作后满足p1 == p2

*区间包含p1,但是不包含p2

例子:利用迭代器自己写一个函数

#include <iostream>
#include <iterator>
#include <algorithm>
#include <vector>using namespace std;template <class T, class InputIterator, class OutoutIterator>
void mySort(InputIterator first, InputIterator last, OutoutIterator result){vector<T> s;for(;first != last; ++first){        //++first的意思是指向下一个迭代器s.push_back(*first);}sort(s.begin(), s.end());copy(s.begin(), s.end(), result);
}int main(){double a[5] = {1.2, 2.4, 0.8, 3.3, 3.2};mySort<double> (a, a+5, ostream_iterator<double>(cout," ")); // a代表第一个数字,a+5代表数列里面第五个cout<<endl;mySort<int>(istream_iterator<int>(cin), istream_iterator<int>(),ostream_iterator<int>(cout," "));cout<< endl;return 0;
}

迭代器的辅助函数:

* advance(p,n)

对p执行n次自增操作

* distance(first,last)

计算两个迭代器first和last的距离,即对first执行多少次"++" 操作后能够使得first == last

迭代器(iterator)相关推荐

  1. C++中的迭代器(STL迭代器)iterator

    1.Cpp中的迭代器 要访问顺序容器和关联容器中的元素,需要通过迭代器(iterator)进行.迭代器是一个变量,相当于容器和操纵容器的算法之间的中介.迭代器可以指向容器中的某个元素,通过迭代器就可以 ...

  2. c++迭代器iterator通用吗_「ES6基础」迭代器(iterator)

    迭代器(iterator)是一个结构化的模式,用于从源以一次一个的方式提取数据.迭代器的使用可以极大地简化数据操作,于是ES6也向JS中添加了这个迭代器特性.新的数组方法和新的集合类型(如Set集合与 ...

  3. 如何得到iterator的当前元素_Java中迭代器Iterator详解

    1.定义 Iterator的定义为:对Collection进行迭代的迭代器,Iterator取代了Java Collection Framework中的Enumeration.Iterator与Enu ...

  4. C++ - const 与 迭代器(iterator) 使用 详解

    const 与 迭代器(iterator) 使用 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/16030561 迭代器(i ...

  5. java:迭代器Iterator

    迭代器Iterator是一个对象,它的工作是遍历并选择序列中的对象,它提供了一种访问一个容器(container)对象中的各个元素,而不必暴露该对象内部细节的方法. 通过容器的 iterator()方 ...

  6. Java迭代器Iterator接口

    迭代器 Iterator接口 迭代器的代码实现 增强for循环 Iterator接口 java.util.Iterator接口:(对集合进行遍历) 有两个常用方法 1.boolean hasNext( ...

  7. java for 迭代器_Java基础-迭代器Iterator与语法糖for-each

    迭代器Iterator与语法糖for-each 一.为什么需要迭代器 设计模式迭代器 迭代器作用于集合,是用来遍历集合元素的对象.迭代器不是Java独有的,大部分高级语言都提供了迭代器来遍历集合.实际 ...

  8. Python中生成器generator和迭代器Iterator的使用方法

    一.生成器 1. 生成器的定义 把所需要值得计算方法储存起来,不会先直接生成数值,而是等到什么时候使用什么时候生成,每次生成一个,减少计算机占用内存空间 2. 生成器的创建方式 第一种只要把一个列表生 ...

  9. java 迭代器的原理_Java集合框架迭代器Iterator实现原理解析

    使用循环遍历集合 普通for循环 for(int i=0;i<10;i++){} 增强for循环 for(String str:list){} 什么是迭代器Iterator Iterator是J ...

  10. STL源码剖析 迭代器iterator的概念 和 traits编程技法

    iterator模式定义如下:提供一种方法,使之能够依序巡访某个 聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表述方式. STL的中心思想在于:将数据容器(containers)和算法(a ...

最新文章

  1. Zabbix服务端的安装及使用
  2. 手机端适应_不轻易透露的超强技巧!详解iVX中怎样做设备自适应
  3. 引入 JPEGCodec;JPEGImageEncoder; 图片处理(有的时候会报错)
  4. 大数据技术之kafka (第 3 章 Kafka 架构深入 ) 高效读写数据
  5. php 随机码类,php随机类型验证码
  6. 计算机网络原理之运输层
  7. FastStone Capture—截图功能
  8. Ant安装及环境配置
  9. 测试方案包括哪些内容
  10. 如何在电脑上开启2个微信(如何进行应用分身)
  11. 产品设计学习(一)——梁宁产品思维大纲
  12. 层次分析法原理及应用案例
  13. 安卓日历每日提醒_好用的安卓日历Jorte:可添加待办事项和提醒
  14. python导入excel散点图_Python 写excel文件并插入散点图
  15. 【AGV——第1篇】AGV导航方式
  16. 四种人适合一起创业,三种人绝对不能合伙
  17. 信息量,信息熵,纯度
  18. 每日一学—text-decoration 属性
  19. 二维图像卷积之后尺寸计算
  20. 妈妈写给热恋中的女儿的信!建议女孩都要看!

热门文章

  1. 渗透测试服务对某客户网站的登录功能进行检测
  2. 2021年朝阳区技能大师工作室及建设项目申报奖励及条件,补贴30万
  3. html里获得农历时间,用JavaScript获取当前农历日期
  4. ChatGPT横空出世|超强大功能写代码、写情书、写文章、做设计火爆全网
  5. 邮箱大师发送邮件服务器连接失败,网易邮箱大师退信的解决方法分享 网易邮箱大师发不了邮件的解决方法介绍...
  6. 棋牌游戏用户流失预测——Xgboost调参
  7. mmsegmention数据集存放格式(三)
  8. 盛大边锋总裁许朝军离职创业正组建团队
  9. 易语言如何读内存地址的数值,模仿CE
  10. Tubi 2022 年成绩单公开了