迭代次数列举

时间:2011-08-28 22:01:49

标签: c++

对于迭代,我知道有不同类型的迭代器例如。正向,双向,随机访问,可用于访问阵列中的项目。

对于枚举,我只听说过可用于索引项目的枚举。但是有没有称为“枚举”或枚举器的术语?如果是这样,那么迭代和枚举之间的区别是什么?

3 个答案:

答案 0 :(得分:11)

术语与语言紧密相关,并且非常令人困惑。

在C ++中,“enumerat ion enum)是一个名称,意思是“一堆编号项目“,所以没有行动正在进行;它只是一个的东西(就像一个class)。

当然,“iterat ion ”是指动作,意思是“多次重复动作”。通常,这会伴随着一系列项目。

但是,在某些语言中,每个语言都具有动作的特定含义:

  • C#:枚举器是对象,它们遍历集合的项目(如C ++迭代器; IEnumerator<T>)。迭代器是方法,几乎完全相同,但是以协程式(yield return)。

    C#仍然具有与C ++类似的enumerat ion enum s)。

  • Java:迭代器遍历集合的项目,就像在C ++中一样。我不确定“普查员”。

    Java仍然具有类似于C ++的enumerat ion ,但它们也有所不同。

  • Python:迭代器就像C#枚举器; generator 就像C#迭代器(yield)。

    没有enumerat ion s,AFAIK。

答案 1 :(得分:0)

我不确定c ++中是否是这种情况,但在java中,枚举器本质上是一个更快的迭代器,因为它不是线程安全的,因此它没有因为检查线程访问而产生的开销。由迭代器完成。

有关详细信息,请参阅此blog entry

答案 2 :(得分:0)

基本上C ++的SinglePassIterator,Java的Iterator和C#的IEnumerator都是等价的。

AFAIK Java和C#不提供类似ForwardIterator的功能,可能是因为它们需要“可复制”, 这对虚拟机来说是一项繁重的操作。将新副本转换为数组并进行索引访问比迭代器快得多。