Iterator 的用法

請參考 vector 的成員 說明

iterator 使用起來像是一個指標, 可以用 ++, <, >, =, *, -> 等等運算去移動, 擷取資料, 你可以抽象地把它想像成是指標, 目前內部實作也是指標, 但是你不要去把它真的轉型為指標,

    DataRecord *ptr = (DataRecord *)iter;
    
compiler 廠商並不保證它以後的實作一定是指標

另外參考一下下面的範例程式, 這個程式告訴你你可以運用 erase() 成員函式刪除 vector 裡面的成員, 刪除後 vector 物件會自動重新排過

// cl -EHsc testVectorErase.cpp

#include <iostream>
#include <vector>
using namespace std;
#include <stdlib.h>

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.begin()+(i-1));  // cause illegal access error in memory
    }

    for (i=0; i<data.size(); i++)
        cout << "(" << i << "," << data[i] << ") ";
    cout << endl;
    
    data.erase(data.begin()+0);     // erase(&data[0]) is incorrect in VS2010
//    data.erase(data.begin()+9);   // cause illegal access error
                                    // i.e. erase(data.begin()+0) would move all members ahead one
                                    //      position virtually
    data.erase(data.begin()+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 is " << sum << endl;

    sum = 0;
    for (iter=data.begin(); iter<data.end(); iter++)
        sum += *iter;
    cout << "using iter, sum is " << sum << endl;
    system("pause");
}
    
上面這個程式的輸出如下:
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, sum is 44
using iter, sum is 44    

C++ 物件導向程式設計課程 首頁

製作日期: 03/13/2013 by 丁培毅 (Pei-yih Ting)
E-mail: pyting@mail.ntou.edu.tw TEL: 02 24622192x6615
海洋大學 電機資訊學院 資訊工程學系 Lagoon