iterator 使用起來像是一個指標,
可以用 ++, <, >, =, *, -> 等等運算去移動, 擷取資料,
你可以抽象地把它想像成是指標,
目前內部實作也是指標,
但是你不要去把它真的轉型為指標,
DataRecord *ptr = (DataRecord *)iter;compiler 廠商並不保證它以後的實作一定是指標 另外參考一下下面的範例程式, 這個程式告訴你你可以刪除 vector 裡面的成員, 刪除後 vector 物件會自動重新排過 // cl -GX testVectorErase.cpp #include <iostream> #include <vector> using namespace std; void main() { vector<int> data; int i; for (i=0; i<10; i++) { data.push_back(i+1); // if (i%2 == 1) data.erase(&data[i-1]); // cause illegal access error in memory } for (i=0; i<data.size(); i++) cout << "(" << i << "," << data[i] << ") "; cout << endl; data.erase(&data[0]); // data.erase(&data[9]); // cause illegal access error // i.e. erase(&data[0]) would move all members ahead one // position virtually data.erase(&data[8]); for (i=0; i<data.size(); i++) cout << "(" << i << "," << data[i] << ") "; cout << endl; vector<int>::iterator iter; int sum=0; for (i=0; i<data.size(); i++) sum += data[i]; cout << "using array index " << sum << endl; sum = 0; for (iter=data.begin(); iter<data.end(); iter++) sum += *iter; cout << "using iter " << sum << endl; }上面這個程式的輸出如下: F:\>testVectorErase (0,1) (1,2) (2,3) (3,4) (4,5) (5,6) (6,7) (7,8) (8,9) (9,10) (0,2) (1,3) (2,4) (3,5) (4,6) (5,7) (6,8) (7,9) using array index 44 using iter 44 |
回
C++ 物件導向程式設計課程
首頁
製作日期: 03/09/2004
by 丁培毅 (Pei-yih Ting)
E-mail: pyting@cs.ntou.edu.tw
TEL: 02 24622192x6615
海洋大學
電機資訊學院
資訊工程系
Lagoon