1
48
迭代意味着重复一些步骤,而枚举意味着遍历值集合中的所有值。所以枚举通常需要某种形式的迭代。 这样,枚举是迭代的一种特殊情况,其中步骤从集合中获取值。 注意,“通常”的“枚举”也可以递归执行,但是递归和迭代是如此密切相关,以至于我不关心这个小的差异。 还可以枚举未显式存储在集合中的值。例如,可以枚举自然数、素数或其他值,但在枚举期间将计算这些值,而不是从物理集合中检索这些值。您将这种情况理解为使用某个逻辑定义的值枚举虚拟集合。 我想里德·科普西明白了。在C中,有两种主要的枚举方法。
第一种方法很难实现并使用对象进行枚举。第二种方法更容易实现和使用延续。 |
2
43
C+2+, iterators 是编译器自动为您生成IEnumerable和/或IEnumerable<t>接口的一种方法。 如果没有迭代器,则需要创建一个类实现 IEnumerator ,包括current、movenext和reset。这需要大量的工作。通常,您将创建一个私有类,该类为您的类型实现IEnumerator<t>,然后您的rclass.getEnumerator()将构造该私有类并返回它。 迭代器是编译器使用简单语法(yield)自动为您生成它的一种方法。这允许您直接在类中实现getEnumerator(),而不需要您指定第二个类(IEnumerator)。该类及其所有成员的构造都是为您完成的。 迭代器对开发人员非常友好-事情是以非常有效的方式完成的,而且工作量要少得多。 当您使用foreach时,两者的行为将相同(前提是您正确地编写自定义IEnumerator)。迭代器只是让生活简单多了。 |
3
18
|
4
12
为了理解迭代器,我们首先需要了解枚举器。 枚举器是一种专门的对象,它为一个人提供了一次浏览一个有序的项目列表的方法(同一种事物有时称为光标)。NET框架提供了两个与枚举器相关的重要接口:IEnumerator和IEnumerable。实现IEnumerator的对象本身就是枚举器;它们支持以下成员:
另一方面,ITER________.NET 2.0引入了ITER_________当枚举对象c______________选项“lly”,ITER___________ _________ITER__________C__________ 迭代器的要点是允许轻松实现枚举器。当一个方法需要返回一个枚举器或一个可枚举类来获得一个有序的项列表时,它会被写入,以便使用__yield_语句以正确的顺序返回每个项。 |
5
11
foreach语句是枚举器的使用者,而迭代器是枚举器的生产者。 以上就是“简而言之,C 5.0”如何解释它,并对我有所帮助。 换句话说,foreach语句使用moveNext()和IEnumerator的current属性来迭代序列,而迭代器用于生成将由foreach语句使用的IEnumerator的实现。在C中,当您编写一个包含yield语句的迭代器方法时,编译器将为您生成一个私有的枚举器。当您遍历序列中的项时,它将调用私有枚举器的moveNext()和current属性。这些方法/属性由迭代器方法中的代码实现,迭代器方法将重复调用这些方法/属性以生成值,直到没有剩余的值可供生成为止。 这是我对C如何定义枚举器和迭代器的理解。 |
6
7
由于没有给出例子,这里有一个对我有帮助的例子。
枚举器是在实现IEnumerator接口的类或类型上调用.getEnumerator()时获得的对象。实现此接口时,您已经创建了编译器所需的所有代码,以便使用
不过,不要把“迭代器”这个词与迭代器混淆。枚举器和迭代器都允许您“迭代器”。枚举和迭代基本上是相同的过程,但实现方式不同。枚举意味着您已经实现了IEnumerator接口。迭代意味着您已经在类中创建了迭代器构造(如下所示),并且正在调用
还要注意,你不必和你的枚举器一起蹲着。你可以打电话
也请注意,类中的迭代器构造只有在实际使用realy时才会被使用,即
下面是一个迭代器示例 msdn :
|
7
3
“迭代器是C 2.0中的一个新功能。迭代器是一个方法、get访问器或运算符,它使您能够支持类或结构中的foreach迭代,而无需实现整个IEnumerable接口。相反,您只提供一个迭代器,它简单地遍历类中的数据结构。当编译器检测到迭代器时,它将自动生成IEnumerable或IEnumerable接口的当前、moveNext和dispose方法。“”- msdn |
8
2
枚举处理对象,而迭代仅处理值。当我们在while循环for循环等中使用迭代时,使用向量哈希表等时使用枚举。我从未使用yield关键字,因此我无法告诉您。 |
Julia · 矢量中相加为总和S的值的数量 1 年前 |
apetrai · 我应该如何假设算法使用哪种迭代器类别? 2 年前 |
Pratik · 不使用Java DeepCopy迭代器 6 年前 |
PanDe · 将两个列表合并为一个Dict、Tuple 6 年前 |
bisarch · 迭代哈希集并在每次迭代中删除多个元素 6 年前 |