C++ Iterator迭代器介紹及Iterator迭代器用法代碼舉例


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;

提示:通過對一個迭代器的解引用操作(*),可以訪問到容器所包含的元素。

 

文章轉載自:[169IT-最新最全的IT資訊]
本文標題:C++ Iterator迭代器介紹及Iterator迭代器用法代碼舉例


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM