***************************************************

更多精彩,欢迎进入:http://shop115376623.taobao.com

STL视频教程:

http://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-9510581626.21.y9vLuz&id=43055362725

***************************************************

容器就是数据结构的泛指,迭代器就是指针的泛指,可以指向元素。

容器相当于一个储藏柜,里面装的许多不同的物品就像是储存的元素,比如面包、啤酒、苹果、现金。要取得各个物体就得用与各个物体向匹配的工具,如取出面包要用盘子、取出啤酒要用杯子、取出苹果要用篮子、取出现金要用钱包。迭代器的作用就相当于取出物品的工具的抽象,通过迭代器泛指现实生活中从贮藏室中取出物体的工具。C++迭代器是一种检查容器内元素并遍历元素的数据类型。

[容器---数据结构(储藏柜)、迭代器--指针(取出物品的工具)]

C++迭代器Interator就是一个指向某种STL对象的指针。 通过该指针可以简单方便地遍历所有元素。
1. Iterator定义

英文定义:

In C++, an iterator is any object that, pointing to some element in a range of elements (such as an array or a container), has the ability to iterate through the elements of that range using a set of operators (at least, the increment (++) and dereference (*) operators).

The most obvious form of iterator is a pointer: A pointer can point to elements in an array, and can iterate through them using the increment operator (++). But other forms of iterators exist. For example, each container type (such as a vector) has a specific iterator type designed to iterate through its elements in an efficient way

C++中的iterator为STL中的重要概念。iterator的概念源自于对遍历一个线性容器工具的抽象,即如何你能访问这个容器的某个元素。对于最简单的数组,当然可以用数组的索引值,因为数组是连续存放在内存中的;但对于链表,就必须用指针。除此之外,还有还有很多种数据结构需要提供一个方便的工具来访问其中的元素,方法有ID,关键字等等。为了统一所有的容器的这种工具的使用,一般提供一整套容器的开发者就会用一种方式来表示各种容器的访问工具。例如C++STL就是使用iteratorMFC自己的容器使用position。C#和java也有自己的方法,但方法是不变的。

iterator的用法可以被统一,但不同的底层容器实现其iterator的原理是不一样的。例如iterator++你可以理解为移动到容器的下一个元素,如果底层如果是数组,把索引值加一就行;如果底层是链表,就得执行类似于m_pCurrent=m_pCurrent->pNext;的操作。因此每种容器都有自己的iterator实现方法。
Iterator的常用方法有: 
iterator++      移到下个元素 
iterator--        移到上个元素 
*iterator         访问iterator所指元素的值
< > == !=       Iterator之间的比较,例如判断哪个元素在前
2. 容器的 iterator 类型
      每种容器类型都定义了自己的C++迭代器类型,如vector:vector<int>::iterator iter;这符语句定义了一个名为 iter 的变量,它的数据类型是vector<int> 定义的iterator 类型。每个标准库容器类型都定义了一个名为iterator的成员,这里的iterator与迭代器实际类型的含义相同。
begin和end操作每种容器都定义了一对命名为begin和end的函数,用于返回迭代器。如果容器中有元素的话,由 begin 返回的迭代器指向第一个元素:
vector<int>::iterator iter = ivec.begin();
      上述语句把 iter 初始化为由名为vector操作返回的值。假设vector不空,初始化后,iter即指该元素为ivec[0]。

由end操作返回的C++迭代器指向vector的"末端元素的下一个"。"超出末端迭代器"(off-the-end iterator)。表明它指向了一个不存在的元素。如果vector为空,begin返回的迭代器与end返回的迭代器相同。由end操作返回的迭代器并不指向 vector 中任何实际的元素,相反,它只是起一个哨兵(sentinel)的作用,表示我们已处理完 vector 中所有元素。

cout<<"Befort *2 the elements are:"<<endl;

for(vector<int>::size_type ix=0;

ix!=10;++ix){ ivec.push_back(ix);

cout<<ivec[ix]<<'\t';

}

//把每个值乘以2并输出

cout<<endl<<"After *2 the elements are:"<<endl;

for(vector<int>::iterator iter=ivec.begin();

iter!=ivec.end();++iter)

{

*iter*=2; cout<<*iter<<'\t';

}

return 0;

}

b)例2

#include <vector>

#include <iostream>

using namespace std;

int main() {

vector<int> ivec;

ivec.push_back(1);

ivec.push_back(2);

ivec.push_back(3);

ivec.push_back(4);

for(vector<int>::iterator iter = ivec.begin();iter != ivec.end(); ++iter)

cout << *iter << endl;

return 0;

}

C++的迭代器Interator相关推荐

  1. JSP 学习笔记 3

    八 jsp 九个内置对象 1`.内置对象的描述    这就个内置对象都是servlet API的类或者接口的实例.JSP把他们都初始化了. 2.九个内置对象分别是 l         applicat ...

  2. 系统架构设计师 - 23种设计模式(GOF)

    文章目录 总览 创建型(5种) 工厂方法 Factory Method 抽象工厂 Abstract Factory 生成器模式 Builder 原型模式 Prototype 单例模式 Singleto ...

  3. C++中字符数组和字符串string

    字符数组 C++中字符数组用char str[]能够用来表示一个字符串. (1)   数组的大小和字符串的长度. 数组的大小一定要大于字符串的长度,由于系统会自己主动补上一个'\0'作为字符串的结束标 ...

  4. Python基础知识个人总结

    仅供自己参考 Python数据类型和变量 (1)python是动态语言,在定义变量时不需要指定变量类型 (2)通常大写为常量,但是python中没有任何机制保证常量不会被改变 (3)对于很大的整数,允 ...

  5. Interator集合遍历迭代器

    我的代码: 出现的问题: 出现这个问题的原因: Iterator 仅用于遍历集合,Iterator 本身并不提供承装对象的能力.如果需要创建 Iterator 对象,则必须有一个被迭代的集合. 集合对 ...

  6. 设计模式之迭代器模式(Iterator)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  7. python的迭代器无法输出值_python迭代器和生成器

    人生还早,谁能笑到最后呢,坚持吧! 1.迭代器协议 由于生成器自动实现了迭代器协议,我们有必要了解迭代器协议是什么,才能更好的理解生成器. 1)迭代器协议:对象要提供__next()__方法,它要么返 ...

  8. C语言和设计模式(迭代器模式)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 使用过C++的朋友大概对迭代器模式都不会太陌生.这主要是因为我们在编写代码的时候离不开迭代器, ...

  9. Android设计模式-迭代器模式

    介绍 迭代器模式(Iterator Pattern)又称游标模式(Cursor)模式,是行为型模式之一.迭代器模式源于对容器的访问,如Java中的List.Map.数组等,由于对容器的访问必然会涉及遍 ...

最新文章

  1. 第五篇:HMM 隐马尔可夫模型
  2. 总结了 90 条写 Python 程序的建议
  3. python 循环语句结果存储_Python条件语句和循环语句
  4. php 访问 sharepoint列表,SharePoint—用REST方式访问列表
  5. 阿里云定时任务并自动释放
  6. 使用ArrayList对大小写字母的随机打印
  7. 白板机器学习笔记 P22-P27 PCA降维
  8. How To Fix: SCP And SSH Login Prompt Is Very Sl...
  9. iOS限制文本输入长度进阶之 一
  10. 针式PKM与众不同的地方
  11. Fermi架构白皮书_中文详细版.pdf
  12. 简单操作去除亿图流程图制作软件(试用版)的水印
  13. adb shell dunpsys SurfaceFlinger
  14. 腾讯云对象存储临时密钥qcloud-python-sts库安装失败解决办法
  15. python matplotlib 官方配色表
  16. linux pv命令,linux运维系列pv指令
  17. HTML入门网页制作,HTML+css运用做出
  18. 罗彻斯特大学计算机科学系专业排名,罗切斯特大学优势专业及优势专业排名(USNEWS美国大学排名)...
  19. Jupyter Notebook 删除不需要的 Kernels
  20. nacos注册成功但是服务管理界面没有内容

热门文章

  1. 前端框架开始学习Vue(一)
  2. json返回值为null显示key值的设置
  3. js作用域与作用域链
  4. 分布式锁 基于Redis
  5. Windows开发的内功和招式
  6. 走台阶 OR 台阶走——《狂人C》习题解答14(第三章习题4)
  7. NVIDIA助力SiemensPLMSoftware“工业4.0创新实验室”,携手推进中国制造创新之路
  8. Android 基于注解IOC组件化/模块化的架构实践
  9. 从Java到Go面向对象--继承思想.md
  10. 老男孩36期运维脱产班---- 决心书