C++中迭代器

C++中的容器

  标准序列容器:vector、string、deque、list

  标准关联容器:set、multiset、map、multimap

 

迭代器的分类

  根据迭代器所支持的操作,可以把迭代器分为5类。

  1、输入迭代器:是只读迭代器,在每个被遍历的位置上只能读取一次。

  2、输出迭代器:是只写迭代器,在每个被遍历的位置上只能被写一次。

  3、前向迭代器:兼具输入和输出迭代器的能力,但是它可以对同一个位置重复进行读和写。但它不支持operator--,所以只能向前移动。

  4、双向迭代器:很像前向迭代器,只是它向后移动和向前移动同样容易。

  5、随机访问迭代器:有双向迭代器的所有功能。而且,它还提供了“迭代器算术”,即在一步内可以向前或向后跳跃任意位置。

 

C++容器中提供的迭代器

  1、输入和输出迭代器的模型分别是建立在针对输入和输出流(例如文件)的读写操作基础上的。所以不难理解,输入和输出迭代器最常见的表现形式是 istream_iterator和ostream_iterator。

  2、所有的标准STL容器都支持比前向迭代器功能更强大的迭代器。(哈希容器的一种、单向链表容器例外,它们提供前向迭代器)

  3、标准关联容器都提供了双向迭代器。list也是如此。

  4、vector、string、deque都提供了随机访问迭代器。指向数组的内部指针对于数组来说也是随机访问迭代器。

 

istream_iterator和ostream_iterator使用示例

istream_iterator
 1  //  istream_iterator example
 2  #include  < iostream >
 3  #include  < iterator >
 4  using   namespace  std;
 5 
 6  int  main () {
 7     double  value1, value2;
 8    cout  <<   " Please, insert two values:  " ;
 9 
10    istream_iterator < double >  eos;          //  end-of-stream iterator
11    istream_iterator < double >  iit (cin);    //  stdin iterator
12 
13     if  (iit != eos) value1 =* iit;
14 
15    iit ++ ;
16     if  (iit != eos) value2 =* iit;
17 
18    cout  <<  value1  <<   " * "   <<  value2  <<   " = "   <<  (value1 * value2)  <<  endl;
19 
20     return   0 ;
21  }
22 

 

 output:



Please, insert two values: 2 32

2*32=64

ostream_iterator
 1  //  ostream_iterator example
 2  #include  < iostream >
 3  #include  < iterator >
 4  #include  < vector >
 5  using   namespace  std;
 6 
 7  int  main () {
 8    vector < int >  myvector;
 9     for  ( int  i = 1 ; i < 10 ++ i) myvector.push_back(i * 10 );
10 
11    ostream_iterator < int >  out_it (cout, " " );
12    copy ( myvector.begin(), myvector.end(), out_it );
13     return   0 ;
14  }
15 

 

output:



10, 20, 30, 40, 50, 60, 70, 80, 90, 

 

你可能感兴趣的:(C++)