程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++ Iterator迭代器介紹及Iterator迭代器用法代碼舉例,iterator代碼

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

編輯:C++入門知識

C++ Iterator迭代器介紹及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;   forint 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迭代器用法代碼舉例


C++程序問題,怎使用set集合與iterator迭代器,編寫程序後出錯,這道題,12配對

set<int>::iterator it=s.find(f12/n);
find返回的是一個set的內容,不是一個迭代器。
set<int>::iterator it=s.begin();
或者set<int>::iterator it=s.end();
可以返回一個迭代器。
 

迭代器iterator不可以作為類指針返回 代碼如下:

vector<>的迭代器並不一定是由普通指針實現,比如微軟的STL中vector的迭代器就是一個類
要返回指針,你可以使用return &(*point) ;

但是這樣很丑,而且你把elementList的內部數據暴露在客戶代碼中,破壞了封裝.

最好是返回DcmElement元素本身,代價太大就返回const DcmElement引用或者指針.

後者仍然容易引起懸垂句柄.
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved