C++ Iterator迭代器介绍及Iterator迭代器用法代码举例

 C++ Iterator迭代器介绍 迭代器可被用来访问一个容器类的所包函的全部元素,其行为像一个指针。举一个例子,你可用一个迭代器来实现对vector容器中所含元素的遍历。有这么几种迭代器如下:迭代器 描述...

   C++ Iterator迭代器介绍

    迭代器可被用来访问一个容器类的所包函的全部元素,其行为像一个指针。举一个例子,你可用一个迭代器来实现对vector容器中所含元素的遍历。有这么几种迭代器如下:

迭代器 描述 

input_iterator 提供读功能的向前移动迭代器,它们可被进行增加(++),比较与解引用(*)。

output_iterator 提供写功能的向前移动迭代器,它们可被进行增加(++),比较与解引用(*)。

forward_iterator 可向前移动的,同时具有读写功能的迭代器。同时具有input和output迭代器的功能,并可对迭代器的值进行储存。

bidirectional_iterator 双向迭代器,同时提供读写功能,同forward迭代器,但可用来进行增加(++)或减少(--)操作。

random_iterator 随机迭代器,提供随机读写功能.是功能最强大的迭代器, 具有双向迭代器的全部功能,同时实现指针般的算术与比较运算。

reverse_iterator  如同随机迭代器或双向迭代器,但其移动是反向的。(Either a random iterator or a bidirectional iterator that moves in reverse direction.)

    vector容器类就有一个random-access随机迭代器,这也意味着其可以使用随机读写的算法。既然随机迭代器具有全部其它迭代器的特性,这也就是说为其它迭代器设计的算法也可被用在vector容器上。


   C++ Iterator迭代器操作举例

 (www.169it.com)

(1) 每种容器类型都定义了自己的迭代器类型,如vector:

1
vector< int >::iterator iter;  //这条语句定义了一个名为iter的变量,它的数据类型是由vector<int>定义的iterator类型。

(2) 使用迭代器读取vector中的每一个元素:

1
2
3
4
5
6
vector< int > ivec(10,1);
for (vector< int >::iterator iter=ivec.begin();iter!=ivec.end();++iter)
{
*iter=2;  //使用 * 访问迭代器所指向的元素
}
const_iterator:

只能读取容器中的元素,而不能修改。

1
2
3
4
5
6
7
8
9
for (vector< int >::const_iterator citer=ivec.begin();citer!=ivec.end();citer++)
{
cout<<*citer;
//*citer=3; error
}
vector< int >::const_iterator 和  const  vector< int >::iterator的区别
const  vector< int >::iterator newiter=ivec.begin();
*newiter=11;  //可以修改指向容器的元素
//newiter++; //迭代器本身不能被修改

(3) iterator的算术操作:

iterator除了进行++,--操作,可以将iter+n,iter-n赋给一个新的iteraor对象。还可以使用一个iterator减去另外一个iterator.

1
2
3
const  vector< int >::iterator newiter=ivec.begin();
vector< int >::iterator newiter2=ivec.end();
cout<< "\n" <<newiter2-newiter;

 一个很典型使用vector的STL代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <vector>
  #include <iostream> 
  using  namespace  std; 
  int  main() 
{
  vector< int > ivec;
  ivec.push_back(1);
  ivec.push_back(2);
  ivec.push_back(3);
  ivec.push_back(4); 
  for (vector< int >::iterator iter = ivec.begin();1. iter != ivec.end(); ++iter)
  cout << *iter << endl;
  }

如下代码对vector容器对象生成和使用了迭代器:

1
2
3
4
5
6
7
8
9
10
11
vector< int > the_vector;
   vector< int >::iterator the_iterator;
   for int  i=0; i < 10; i++ )
     the_vector.push_back(i);
   int  total = 0;
   the_iterator = the_vector.begin();
   while ( the_iterator != the_vector.end() ) {
     total += *the_iterator;
     the_iterator++;
   }
   cout <<  "Total="  << total << endl;

提示:通过对一个迭代器的解引用操作(*),可以访问到容器所包含的元素。


  • 2
    点赞
  • 0
    评论
  • 6
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页