C++ Iterator迭代器介绍及Iterator迭代器用法代码举例

C++ Iterator迭代器介绍

迭代器可被用来访问一个容器类的所包函的全部元素,其行为像一个指针。举一个例子,你可用一个迭代器来实现对vector容器中所含元素的遍历。有这么几种迭代器如下:

迭代器 描述

input_iterator 提供读功能的向前移动迭代器,它们可被进行增加(++),比较与解引用(*)。

output_iterator 提供写功能的向前移动迭代器,它们可被进行增加(++),比较与解引用(*)。

forward_iterator 可向前移动的,同时具有读写功能的迭代器。同时具有input和output迭代器的功能,并可对迭代器的值进行储存。

bidirectional_iterator 双向迭代器,同时提供读写功能,同forward迭代器,但可用来进行增加(++)或减少(--)操作。

random_iterator 随机迭代器,提供随机读写功能.是功能最强大的迭代器, 具有双向迭代器的全部功能,同时实现指针般的算术与比较运算。

reverse_iterator  如同随机迭代器或双向迭代器,但其移动是反向的。(Either a random iterator or a bidirectional iterator that moves in reverse direction.)

vector容器类就有一个random-access随机迭代器,这也意味着其可以使用随机读写的算法。既然随机迭代器具有全部其它迭代器的特性,这也就是说为其它迭代器设计的算法也可被用在vector容器上。

   C++ Iterator迭代器操作举例

(本文由www.169it.com收集整理)

(1) 每种容器类型都定义了自己的迭代器类型,如vector:


1

vector<int>::iterator iter; //这条语句定义了一个名为iter的变量,它的数据类型是由vector<int>定义的iterator类型。

(2) 使用迭代器读取vector中的每一个元素:


1

2

3

4

5

6

vector<int> ivec(10,1);

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

{

*iter=2; //使用 * 访问迭代器所指向的元素

}

const_iterator:

只能读取容器中的元素,而不能修改。


1

2

3

4

5

6

7

8

9

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

{

cout<<*citer;

//*citer=3; error

}

vector<int>::const_iterator 和 const vector<int>::iterator的区别

const vector<int>::iterator newiter=ivec.begin();

*newiter=11; //可以修改指向容器的元素

//newiter++; //迭代器本身不能被修改

(3) iterator的算术操作:

iterator除了进行++,--操作,可以将iter+n,iter-n赋给一个新的iteraor对象。还可以使用一个iterator减去另外一个iterator.


1

2

3

const vector<int>::iterator newiter=ivec.begin();

vector<int>::iterator newiter2=ivec.end();

cout<<"\n"<<newiter2-newiter;

一个很典型使用vector的STL代码:


1

2

3

4

5

6

7

8

9

10

11

12

13

#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();1. iter != ivec.end(); ++iter)

 cout << *iter << endl;

 }

如下代码对vector容器对象生成和使用了迭代器:


1

2

3

4

5

6

7

8

9

10

11

vector<int> the_vector;

  vector<int>::iterator the_iterator;

  forint i=0; i < 10; i++ )

    the_vector.push_back(i);

  int total = 0;

  the_iterator = the_vector.begin();

  while( the_iterator != the_vector.end() ) {

    total += *the_iterator;

    the_iterator++;

  }

  cout << "Total=" << total << endl;

提示:通过对一个迭代器的解引用操作(*),可以访问到容器所包含的元素。

文章转载自:[169IT-最新最全的IT资讯]
本文标题:C++ Iterator迭代器介绍及Iterator迭代器用法代码举例

时间: 2024-12-25 21:04:27

C++ Iterator迭代器介绍及Iterator迭代器用法代码举例的相关文章

java 迭代器Iterator的介绍

 迭代对于我们搞Java的来说绝对不陌生.我们常常使用JDK提供的迭代接口进行Java集合的迭代. [java] view plain copy print? Iterator iterator = list.iterator(); while(iterator.hasNext()){ String string = iterator.next(); //do something } Iterator iterator = list.iterator(); while(iterator.ha

C#设计模式(16)——迭代器模式(Iterator Pattern)

一.引言 在上篇博文中分享了我对命令模式的理解,命令模式主要是把行为进行抽象成命令,使得请求者的行为和接受者的行为形成低耦合.在一章中,将介绍一下迭代器模式.下面废话不多说了,直接进入本博文的主题. 二.迭代器模式的介绍 迭代器是针对集合对象而生的,对于集合对象而言,必然涉及到集合元素的添加删除操作,同时也肯定支持遍历集合元素的操作,我们此时可以把遍历操作也放在集合对象中,但这样的话,集合对象就承担太多的责任了,面向对象设计原则中有一条是单一职责原则,所以我们要尽可能地分离这些职责,用不同的类去

设计模式之迭代器模式--- Pattern Iterator

模式的定义 迭代器模式定义: Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation. 提供一种方法访问一个容器对象中各个元素,而又不需要暴露对象的内部细节. 类型 行为类 模式的使用场景 方便遍历访问容器内的元素 优点 面向对象设计原则中的单一职责原则,对于不同的功能,我们要尽可能的把这个功能分解出单一的职责,不

设计模式-迭代器模式(Iterator Pattern)

本文由@呆代待殆原创,转载请注明出处:http://www.cnblogs.com/coffeeSS/ 迭代器模式简介 迭代器相信大部分人都不陌生,java/c++等很多编程语言的容器类都支持迭代器操作,这个模式就是介绍迭代器实现的细节. 迭代器模式的定义和基本结构 定义:提供一个可以顺序访问一个聚合对象中的各个元素有不暴露器内部实现的方法. 一张来自<Head First>的结构图. client:调用Iterator对ConcreteAggregate内的元素进行迭代而不需要关系Concr

JAVA设计模式之 迭代器模式【Iterator Pattern】

一.概述 提供一种方法来访问聚合对象(容器container),而不用暴露这个对象的内部细节. 二.适用场景 1>遍历访问聚合对象中的元素,而无须暴露它的内容表示,将聚合对象的访问和内部数据的存储分离.使得访问聚合对象时无须了解其内部的实现细节. 2>需要为一个聚合对象提供多种遍历实现. 三.UML类图 四.参与者 1>Iterator(抽象迭代器):它定义了访问和遍历元素的接口,声明了用于遍历数据元素的方法,例如:用于获取第一个元素的first()方法,用于访问下一个元素的next()

第 14 章 迭代器模式【Iterator Pattern】

以下内容出自:<<24种设计模式介绍与6大设计原则>> 周五下午,我正在看技术网站,第六感官发觉有人在身后,扭头一看,我C,老大站在背后,赶忙站起来, “王经理,你找我?” 我说. “哦,在看技术呀.有个事情找你谈一下,你到我办公室来一下.” 老大说. 到老大办公室, “是这样,刚刚我在看季报,我们每个项目的支出费用都很高,项目情况复杂,人员情况也不简单,我看着 也有点糊涂,你看,这是我们现在还在开发或者维护的103 个项目,你能不能先把这些项目信息重新打印一份 给我,咱们好查查到

迭代器模式(Iterator.hasNaxt())

迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式.这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示. 迭代器模式属于行为型模式. 介绍 意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示. 主要解决:不同的方式来遍历整个整合对象. 何时使用:遍历一个聚合对象. 如何解决:把在元素之间游走的责任交给迭代器,而不是聚合对象. 关键代码:定义接口:hasNext, next. 应用实例:JAVA 中的

【设计模式】迭代器模式(Iterator )

摘要: 1.本文将详细介绍迭代器模式的原理和实际代码中特别是Android系统代码中的应用. 纲要: 1. 引入迭代器模式 2. 迭代器的概念及优缺点介绍 3. 迭代器在Android源码中的应用 1.段子404 Not Found: 迭代器(迭代子)模式真的找不到段子了,不过好在这个模式不仅非常好理解,而且例子很多.cnblogs博主卡奴达摩曰:如果要问java中使用最多的一种模式,答案不是单例模式,也不是工厂模式,更不是策略模式,而是迭代器模式.下面我们一起来学习. 2.迭代器模式介绍 2.

【17】迭代器模式(Iterator Pattern)

一.引言 在上篇博文中分享了我对命令模式的理解,命令模式主要是把行为进行抽象成命令,使得请求者的行为和接受者的行为形成低耦合.在这一章中,将介绍一下迭代器模式. 二.迭代器模式的介绍 迭代器是针对集合对象而生的.对于集合对象而言,必然涉及到集合元素的添加删除操作,同时也肯定支持遍历集合元素的操作.我们此时可以把遍历操作也放在集合对象中,但这样的话,集合对象就承担太多的责任了.面向对象设计原则中有一条是单一职责原则,所以我们要尽可能地分离这些职责,用不同的类去承担不同的职责.迭代器模式就是用迭代器