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

C++ Iterator迭代器介紹html

    迭代器可被用來訪問一個容器類的所包函的所有元素,其行爲像一個指針。舉一個例子,你可用一個迭代器來實現對vector容器中所含元素的遍歷。有這麼幾種迭代器以下:ios

迭代器 描述 算法

input_iterator 提供讀功能的向前移動迭代器,它們可被進行增長(++),比較與解引用(*)。dom

output_iterator 提供寫功能的向前移動迭代器,它們可被進行增長(++),比較與解引用(*)。spa

forward_iterator 可向前移動的,同時具備讀寫功能的迭代器。同時具備input和output迭代器的功能,並可對迭代器的值進行儲存。設計

bidirectional_iterator 雙向迭代器,同時提供讀寫功能,同forward迭代器,但可用來進行增長(++)或減小(--)操做。指針

random_iterator 隨機迭代器,提供隨機讀寫功能.是功能最強大的迭代器, 具備雙向迭代器的所有功能,同時實現指針般的算術與比較運算。code

reverse_iterator  如同隨機迭代器或雙向迭代器,但其移動是反向的。(Either a random iterator or a bidirectional iterator that moves in reverse direction.)htm

    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迭代器用法代碼舉例

相關文章
相關標籤/搜索