`

迭代器(C#)

阅读更多

迭代器是一种对象,它能够用来遍历STL容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。迭代器修改了常规指针的接口,所谓迭代器是一种概念上的抽象:那些行为上象迭代器的东西都可以叫做迭代器。然而迭代器有很多不同的能力,它可以把抽象容器和通用算法有机的统一起来。

  迭代器提供一些基本操作符:*、++、==、!=、=。这些操作和C/C++“操作array元素”时的指针接口一致。不同之处在于,迭代器是个所谓的smart pointers,具有遍历复杂数据结构的能力。其下层运行机制取决于其所遍历的数据结构。因此,每一种容器型别都必须提供自己的迭代器。事实上每一种容器都将其迭代器以嵌套的方式定义于内部。因此各种迭代器的接口相同,型别却不同。这直接导出了泛型程序设计的概念:所有操作行为都使用相同接口,虽然它们的型别不同。

  

功能

迭代器使开发人员能够在类或结构中支持foreach迭代,而不必整个实现IEnumerable或者IEnumerator接口。只需提供一个迭代器,即可遍历类中的数据结构。当编译器检测到迭代器时,将自动生成IEnumerable接口或者IEnumerator接口的Current,MoveNext和Dispose方法。

  

特点

1.迭代器是可以返回相同类型值的有序序列的一段代码;

  2.迭代器可用作方法、运算符或get访问器的代码体;

  3.迭代器代码使用yield return语句依次返回每个元素,yield break将终止迭代;

  4.可以在类中实现多个迭代器,每个迭代器都必须像任何类成员一样有惟一的名称,并且可以在foreach语句中被客户端代码调用;

  5.迭代器的返回类型必须为IEnumerable和IEnumerator中的任意一种;

  6.迭代器是产生值的有序序列的一个语句块,不同于有一个 或多个yield语句存在的常规语句块;

  7.迭代器不是一种成员,它只是实现函数成员的方式,理解这一点是很重要的,一个通过迭代器实现的成员,可以被其他可能或不可能通过迭代器实现的成员覆盖和重载;

  8.迭代器块在C#语法中不是独特的元素,它们在几个方面受到限制,并且主要作用在函数成员声明的语义上,它们在语法上只是语句块而已;

一个简单例子

  #include <iostream>

  using namespace std;

  class _iterator

  {

  private:

  char* p;

  public:

  _iterator(char* str):p(str){}

  char*& operator++()

  {

  p+=1; //跟 p++同价;

  return p;

  }

  };

  int main()

  {

  char* p="This is C++ program";

  _iterator it(p);

  cout<<"++之前:"<<p<<endl;

  char* p1=++it; //把地址向前加了一个char 型长度,然后给指针p1

  cout<<"++之后:"<<p1<<endl;

  return 0;

  }

遍历Vector容器示例

//equivalent loop using iterators to reset all the elements in ivec to 0

  #include <iostream>

  #include <vector>

  using namespace std;

  int main()

  {

  vector<int> ivec(10,42);

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

  *iter=0;

  return 0;

  }

分享到:
评论

相关推荐

    C#设计模式迭代器示例

    在C#中,迭代器模式的应用非常广泛,尤其是在处理集合类库时。本教程将深入讲解如何在C#中实现迭代器模式。 首先,让我们理解迭代器模式的基本组成。在C#中,迭代器通常包含以下组件: 1. **聚合对象(Aggregate)...

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

    迭代器模式是软件设计模式中的一种行为模式,它在C#等面向对象编程语言中有着广泛的应用。这个模式的主要目标是允许用户遍历一个聚合对象(如数组、集合或列表)的所有元素,而无需了解底层的实现细节。下面将详细...

    迭代器模式Demo

    在Java、C#等面向对象语言中,迭代器模式被广泛使用。 迭代器模式主要包含以下角色: 1. **聚合角色(Aggregate)**:存储一组对象,提供创建迭代器的接口。 2. **迭代器角色(Iterator)**:负责遍历聚合中的元素...

    迭代器、分部类、索引器.

    在C#中,迭代器通过`yield return`语句实现。迭代器可以被用在自定义数据结构中,以便更方便地遍历它们的元素。例如,你可以创建一个迭代器方法,返回一个枚举器,该枚举器逐个返回序列中的元素。这样,即便数据结构...

    设计模式之迭代器模式(Iterator)

    在Java、Python、C#等面向对象语言中,迭代器模式都有其对应的应用。例如,在Java中,`Iterable`接口和`Iterator`接口就是实现迭代器模式的关键。`Iterable`接口定义了获取迭代器的方法`iterator()`,而`Iterator`...

    C#2_0迭代器

    在C#编程语言中,迭代器是一个非常重要的概念,尤其在C# 2.0版本中引入,极大地增强了对集合和数据流的操作能力。迭代器允许开发者定义自己的遍历方式,使得可以按照自定义的顺序访问集合中的元素,而无需暴露集合的...

    C#学习笔记整理-迭代器模式介绍

    在C#中,迭代器模式通常通过实现`IEnumerator`接口来实现。不过,上述内容展示了一个自定义迭代器模式的实现,通过抽象类`Iterator`和两个具体的迭代器类`ConcreteIterator`和`ConcreteIteratorDesc`来演示。 1. **...

    迭代器模式代码示例

    在Java、C#等面向对象语言中,迭代器模式被广泛应用于容器类,如ArrayList、LinkedList等,使得我们可以遍历集合中的每一个元素。 迭代器模式包含以下主要角色: 1. **迭代器接口(Iterator)**:定义了遍历集合...

    c#代码介绍23种设计模式-16迭代器模式(附代码)

    1. 迭代器模式的介绍 迭代器是针对集合对象而生的,对于集合对象而言,必然涉及到集合元素的添加删除操作,同时也肯定支持遍历集合元素的操作,我们此时可以把遍历操作也放在集合对象中, 但这样的话,集合对象就...

    迭代器模式demo

    在Java、C#等面向对象编程语言中,迭代器模式被广泛应用于集合类库,如ArrayList、LinkedList等。这个"迭代器模式demo"可能是为了演示如何在实际代码中实现或使用迭代器模式。 在迭代器模式中,主要有四个角色: 1....

    设计模式的迭代器模式的例子

    在Java、C#等面向对象语言中,迭代器模式被广泛应用于容器类,如ArrayList、LinkedList等,使得我们可以方便地遍历集合中的所有元素。 迭代器模式的主要组件包括: 1. **聚合对象(Aggregate)**:包含一组相关或...

    设计模式之迭代器模式

    - **显式迭代器**:在Java、C#等语言中,迭代器通常作为接口实现,程序员需要显式地创建迭代器对象并调用其方法进行遍历。 - **隐式迭代器**:在C++中,通过`begin()`和`end()`函数实现,迭代器通常隐含地与容器...

    设计模式-迭代器模式(讲解及其实现代码)

    在Java、C#等面向对象语言中,迭代器模式的应用非常广泛,例如Java中的`Iterable`接口和`Iterator`接口,C#中的`IEnumerable`接口和`IEnumerator`接口。这些接口为实现迭代器模式提供了标准的方式。 迭代器模式的...

    深入了解c# 迭代器和列举器

    深入了解 C# 迭代器和列举器 C# 迭代器和列举器是 C# 语言中两个重要的概念,它们之间存在紧密的联系,都是用于实现遍历集合中的元素的机制。本文将深入介绍 C# 迭代器和列举器的相关知识,帮助大家更好地理解和...

    迭代器源码

    在C#编程语言中,迭代器是一个非常重要的概念,它允许程序员按照特定顺序访问集合中的元素,而无需暴露集合的内部结构。迭代器在处理集合数据时提供了极大的灵活性,广泛应用于各种数据结构如数组、列表、队列和堆等...

    设计模式之迭代器模式(新)

    迭代器模式是软件设计模式中的一种行为模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层表示。在“设计模式之迭代器模式(新)”中,我们将深入探讨这种模式的核心概念、实现方式以及它在实际编程中的应用...

    (行为型模式) Iterator 迭代器模式

    C#面向对象设计模式 (行为型模式) Iterator 迭代器模式 视频讲座下载

Global site tag (gtag.js) - Google Analytics