Iterators

原创 2004年10月13日 17:01:00

Iterators

1.Input Iterators
必须满足以下条件:
1)prefix++ and postfix++
2)operator!=
3)dereference* and only support read, not support write
4) operator ==
see in msdn
template< typename InputIterator > find(....)表明find算法需要Input Iterator。
see below:
template< typename T, typename InputIterator >
InputIterator find( InputIterator first, InputIterator last, const T& value )
{
 while ( first != last && *first !=value )
 {
  ++first ;
 }
 return first ;
}

2.Output Iterators
必须满足以下条件:
1)perfix++ and postfix++
2)dereference*, only support write
see below:
template< typename InputIterator, typename OutputIterator >
OutputIterator copy( InputIterator first, InputIterator last, OutputIterator result )
{
 while ( first != last )
 {
  *result = *first ;
  ++first ;
  ++result ;
 }
 return result ;
}

3.Forward Iterators
满足Input和Ouput Iterator的所有要求,同时可以储存一个forward Interator并利用它进行遍历,这样就可用于

multipass algorithm中。
see below:
template< typename ForwardIterator, typename T >
void replace< ForwardIterator first, ForwardIterator last, const T& x, const T& y )
{
 while ( first != last )
 {
  if ( *first == x )
   *first = y ;
  ++first ;
 }
}

4.Bidirectional Iterators
满足Forward Iterator的所有要求,同时提供prefix--和postfix--
list::iterator满足要求,由于list是一个double link list
such algorithm reverse require Bidirectional Iterators

5.Random access Iterators
满足Bidirectional Iterator的所有要求,同时提供以下操作(r,s为random access iterator,n为整数):
1)r+n和r-n
2)r[n],即*(r+n)
3)双向跳跃,即r+=n和r-=n
4)operator- with random access iterator,即r-s,得到一整数值
5)operator comparisons between random access iterator,即r<s,r>s,r<=s,r>=s,得到一bool值
vector、deque的iterator满足以上这些要求。
要求这样iterator的算法有binary_search、sort等

6.Insert Iterator
1)back_insert_iterator<Container> 利用push_back成员函数
2)front_insert_iterator<Container> 利用push_front成员函数
3)insert_iterator<Container> 利用insert成员函数
在copy时,假如没有给结果存放处分配足够的空间,就需要用到Insert Iterator。
如copy( vec.begin(), vec.end(), back_insert_iterator<vector<int> >(vec2) ) ;
标准提供了另一种简化:
template< typename Container>
inline back_insert_iterator<Container> back_inserter(Container& x)
{
 return back_insert_iterator<Container>(x) ;
}
则copy可以简化为copy( vec.begin(), vec.end(), back_inserter(vec2) ) ;
利用insert iterator,在赋值时,即*it=value时,此操作会转换成:
contain.push_back(value) ;
而it始终指向容器pass-the-end pointer,而operator++始终什么也不干。

由于vector并未提供push_front,因而front_insert_iterator不能对vector使用,而所有容器都提供了insert操

作,所以insert_iteartor能被所有容器使用。

7.istream_iterator和ostream_iterator
把他们当成input iterator和output iterator用即可,只是两个相关联的对象必须为输入流(istream&)和输出

流(ostream&)

C++ 迭代器(Iterators)

迭代器用于存取(access)一个序列(sequence)中的元素,其用法类似于指针。例如,我们可以用迭代器遍历一个向量(vector)的所有元素。 下列代码建立并使用与一个向量关联的迭代器: ...
  • cuiyifang
  • cuiyifang
  • 2012年09月05日 23:03
  • 1033

Cocos2d-x Vector——vector iterators incompatible

Cocos2d-x Vector —— vector iterators incompatible
  • lx417147512
  • lx417147512
  • 2015年07月20日 15:11
  • 1599

"vector iterators incompatible"及一些感想

首先要感谢下这个前辈:http://www.2cto.com/kf/201110/108902.html,是他的帖子给了我方向。         先上一段代码: #include #include ...
  • crazygougou
  • crazygougou
  • 2013年07月20日 13:20
  • 1479

vector iterators incompatible问题

今天写小段代码出现  vector iterators incompatible 问题
  • pipi0714
  • pipi0714
  • 2014年11月14日 09:23
  • 1478

关于list iterators incompatible/vector iterators incompatible 报错总结

STL有三大核心部分:容器(Container)、算法(Algorithms)、迭代器(Iterator),容器适配器(container adaptor),函数对象(functor),除此之外还有S...
  • gggg_ggg
  • gggg_ggg
  • 2015年02月06日 10:27
  • 2010

Guava学习之Iterators

Iterators类提供了返回Iterator类型的对象或者对Iterator类型对象操作的方法。除了特别的说明,Iterators类中所有的方法都在Iterables类中有相应的基于Iterable...
  • w397090770
  • w397090770
  • 2013年09月11日 23:52
  • 2714

运行出错: map/set iterators incompatible

运行出错: map/set iterators incompatible   原因:erase使得迭代器失效   可以参考:  http://www.cppblog.com/Herbert/...
  • wangjianfeiwuhao
  • wangjianfeiwuhao
  • 2012年03月06日 22:21
  • 4688

C++/CLI中的Checked Iterators

The following symbols are for use with the checked iterators feature._SECURE_SCL If defined as 1, un...
  • bz201
  • bz201
  • 2006年01月10日 21:38
  • 2971

迭代器报“vector iterators incompatible”错的几种可能

由于平时迭代器与向量用的并不是很多,因此今天上午遇到了一个非常怪异的问题,浪费了我整整4个小时!心疼呀!!        下面是详细经过,不想看经过的可略过直接看我的总结。            我...
  • qq1184810369
  • qq1184810369
  • 2013年10月10日 14:20
  • 3401

include\\xtree Line:304 Expression: map/set iterators incompatible

环境:xp sp3,vs2008代码 :#include #include using namespace std;int main(){    map a;    a.insert(pair(1,1...
  • dragoo1
  • dragoo1
  • 2017年01月17日 21:32
  • 506
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Iterators
举报原因:
原因补充:

(最多只允许输入30个字)