每个标准容器都提供有一个名为begin()的操作函数,可返回一个iterator,指向第一个元素。另一个名为end()的操作函数会返回一个iterator,指向最后一个元素的下一个为主。因此,不论此刻如何定义iterator对象,以下都是对iterator进行赋值(assigen)、比较(compare)、递增(increment)、提领(dereference)操作:

——《Essential C++》中文版 Page 73

vector <int> myvec;
//以下是标准库中的iterator语法。
//iter指向一个vector,后者的元素类型为int。
//iter初值指向myvec的第一个元素。
vector<int>::iterator iter = myvec.begin();

欲通过iterator取得元素值,我们可以采用一般指针的提领方式:
cout<<"int value of element: "<<∗\ast∗iter

例,以iterator取代原先使用的下标“myvec[i]”运算符:

//小问学编程
#include<iostream>
#include<vector>using namespace std;int main()
{vector<int> myvec{3,4,5};vector<int>::iterator iter=myvec.begin();cout<<"向量每个元素分别为: ";for (;iter!=myvec.end();++iter){cout<<*iter<<' ';}return 0;
}

运行结果:
注意本例以下几处:

实现find(),让它同时支持两种形式:一对指针,或是一对指向某种容器的iterator.

下面的例子演示如何用实现的find()来处理array、vector、list :

//小问学编程
#include<iostream>
#include<vector>
#include<list>using namespace std;template<typename IteratorType,typename elemType>
IteratorType find(IteratorType first,IteratorType last,const elemType &value)
{for(;first !=last;++first)if(value==*first)return first;return last;
}int main()
{const int asize=8;int ia[asize]={1,1,2,3,5,8,13,21};//以ia的8个元素作为list和vector的初值vector<int> ivec(ia,ia+asize);list<int> ilist(ia,ia+asize);int target=8;int* pia=find(ia,ia+asize,target);if(pia !=ia+asize)cout<<"在array中找到了"<<*pia<<endl;vector<int>::iterator it;it=find(ivec.begin(),ivec.end(),target);if(it!=ivec.end())cout<<"在vector中找到了";cout<<*it<<",在ivec的第"<<(it-ivec.begin())<<"个位置"<<endl;list<int>::iterator iter;iter=find(ilist.begin(),ilist.end(),target);if(iter!=ilist.end())cout<<"在list中找到了"<<*iter<<endl;return 0;
}
//本代码改自《Essential C++》侯捷译P75

运行结果:

注意本例以下几处:

附:

《Essential C++》笔记之迭代器Iterator(泛型指针)相关推荐

  1. 《Essential C++》笔记之设计一个泛型算法(二)

    前文:<Essential C++>笔记之设计一个泛型算法(一) 相关博文:C++头文件<functional>和bind.placeholders占位符使用简单例子 相关博文 ...

  2. 《Essential C++》笔记之设计一个泛型算法(一)

      任务1:用户给予一个整数vector,我们必须返回一个新的vector,其中内含原vector之中小于10的所有数值.一个快速但缺乏弹性的解法是:   任务2:如果用户想找到所有小于11的元素,我 ...

  3. 2.Collection、Iterator迭代器、泛型、斗地主案例

    Collection集合 1.1 集合概念及其与数组的区别 集合:集合是java中提供的一种容器,可以用来存储多个数据. 与数组的区别 数组的长度是固定的.集合的长度是可变的. 数组中存储的是同一类型 ...

  4. 设计模式学习笔记——迭代器(Iterator)模式

    设计模式学习笔记--迭代器(Iterator)模式 @(设计模式)[设计模式, 迭代器模式, iterator, 迭代器] 设计模式学习笔记迭代器Iterator模式 基本介绍 迭代器案例 类图 实现 ...

  5. 【OpenCV】OpenCV实战从入门到精通之 -- 指针访问、迭代器iterator、动态地址计算配合at元素

    目录 1.指针访问像素 2.迭代器操作像素 3.动态地址计算 OpenCV中,有三种方式访问图像像素: 指针访问:C操作符[]: 迭代器iterator 动态地址计算 上述方法在访问速度上略有差异.d ...

  6. JAVA day15 Collection(集合)、Iterator迭代器、泛型<E>

    1.Collection(集合) 集合:集合是java中提供的⼀种容器,可以⽤来存储多个数据. 集合与数组的区别: 数组的长度是固定的,集合的长度是可变的. 数组中存储的是同⼀类型的元素,可以存储基本 ...

  7. Java基础知识(二)(Object类的常用方法、日期时间类、System类、StringBuilder类、包装类、Collection集合、Iterator迭代器、泛型、list集Set接口...)

    文章目录 Java基础知识(二) 1.Object类的常用方法 1.1 toString方法 1.2 equals方法 1.3 Objects类 2.日期时间类 2.1 Date类 2.2 DateF ...

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

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

  9. java可变参数 map_Java第6期Collection、Map、迭代器、泛型、可变参数、集合工具类、集合结构、Debug...

    集合:集合是java中提供的一种容器,可以用来存储多个数据. 集合和数组既然都是容器,它们有啥区别呢?数组的长度是固定的.集合的长度是可变的. 数组中存储的是同一类型的元素,可以存储基本数据类型值.集 ...

最新文章

  1. Go的变量到底在堆还是栈中分配
  2. uni 根目录路径_如何解决uniapp图片路径错误问题
  3. 防止论坛用户重复登录的方法 .
  4. mongodb备份恢复,数据导入导出
  5. 如何在Java地毯下有效地清除问题
  6. CSS常用单词-弹性盒(专业版)
  7. shell练习DAY14
  8. 音乐 美术 计算机期末考试表,贵阳初中学业水平考试信息技术、音乐、美术考评标准出炉!...
  9. 机器学习之集成算法----Adaboost算法
  10. 中柏平板触摸驱动_华北工控 | 工业平板电脑在医院自助设备中的广泛应用
  11. Java语法基础学习DayTwo
  12. ABP源码分析五:ABP初始化全过程
  13. WIN10升级的做法有待友好设计
  14. kafka入门:简介、使用场景、设计原理
  15. Solaris下用Bind安装和配置DNS
  16. 为什么程序员不需要MATLAB技能?
  17. 数学中的圆周率符号怎么输入
  18. CodinGame - Chuck Norris 思路
  19. CSS模块化基本思想
  20. WPF 使用 Direct2D1 画图入门

热门文章

  1. git 学习1--查看全局配置
  2. java smslib rxtx_短信猫java二次开发包源代码smslib-3.5.4.jar
  3. ajax请求去获取base64_前端将图片转换为base64位,使用ajax传递到后台,但是图片经过base64转换成字符串后非常长,无法使用ajax...
  4. 基于JAVA+SpringBoot+Mybatis+MYSQL的疫苗接种信息管理系统
  5. php小论坛开发总结,PHP开发 小型论坛教程之添加论坛-2
  6. php+oracle新增数据类型,Oracle 修改某个字段的数据类型三种方式
  7. [转] @JoinColumn 详解 (javax.persistence.JoinColumn)
  8. hibernate级联保存问题
  9. [轉載 Delphi Format]
  10. 基于matlab的OFDM百度文库,基于matlab的OFDM仿真总结.doc