posts - 43,comments - 3,trackbacks - 0
1.Trivial Iterator:此Iterator可以不具有累加性但他必须是dereference的 *x成立,dereference assignment即:*x=t,Member Access(成员访问):x-〉m成立。STL定义的所有iterator types都具有累加性,他们不仅仅是Trivial Iterator的Models。

2.Input Iterator,此类iterator可以被提取值,可以累加以获得序列中的下一个iterator,但他不保证多次提取某个位置都是成功的,例如,他不保证一定能够访问同一个input iterator i 两次,Input Iterator的model type不需在单一range内支持一个以上的现行有效的(active)iterator。    Input Iterator是 Trivial Iterator的refinement,注意,每个可以累加的iterator i都必须是可dereference的, 而past-the-end 不是可以dereference的。istream_iterator是它的一个恰当的model

3.Output Iterator提供一种机制,用来存储数值序列,但不必提供取出数值的方法,它的接口更受约束。它不必支持member Access 或 相等比较(equality),也不必拥有相关类型defference_type或者value_type, 它同Input Iterator一样,可以不支持multipass dereference,不保证有效的访问同一个Output Iterator两次,直觉上可以把output Iterator想象为磁带:可以写数值到目前位置上,然后前进到下一个位置;但不能读出,也不能回转或者倒带。注意Output Iterator不是Trivial Iterator的refinement,它仅是Assignable的refinement,即:*x=t有效,但*x却未必有意义。必须有效的表达式有:y=x 、 *x = t、 ++x、x++、 *x++=t。 STL中的Models 有:front_insert_iterator、back_insert_iterator、insert_iterator、ostream_iterator。

4.Forward Iterator,符合线性数值序列的直觉概念,它可应用于multipass dereference的算法中,将一个Forward Iterator累加,并不会造成旧值得副本无效。但它不必支持在range中回头移动,但必须支持向前移动.他是 Input Iterator 、Output Iterator、Default Constructible的refinement。STL中的models有slist<int>::iterator, slist<int>::const_iterator。

5.Bidirectional Iterator,是一种可以累加、递减的iterator。递减是Bidirectional Iterator与Forward Iterator之间的唯一区别,它是Forward Iterator的refinement。  (++i; --i)或者(--i;++i)后必须保持位置不动。

6.Random Access Iterator,是一种可累加、递减的iterator,同时向前或回头移动任意步数时,以及在比较两个iterators时,耗用固定时间 O(c)。它是Birectional iterator和Strict Weakly Comparable的refinement。有效的表达式有:i += n (n可以为负整数); i-j返回 difference_type 差距。 i<j  、 i[n] 为 *(i+n)、 i[n] = t。 STL中的models有:vector<int>::iterator、vector<int>::const_iterator、 deque<int>::iterator、deque<int>::const_iterator

posted on 2008-02-04 15:42 RUI 阅读(433) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理