🚀Iterater

跌代器

Iterator 像是一個比較聰明的 pointer 可以指到容器內任何一個位置,然後操作那個位置的資料。

要印出整個陣列有兩個方法 :

// 假如有一個陣列長這樣
// len = 5
int arr[] = {1, 2, 3, 4, 5};
int len = sizeof(arr) / sizeof(int);


/*========== 用 index(operator) 印出整個陣列 ==========*/

// 很簡單,應該也是大家最常用的方法
for(int i=0 ; i<len ; i++){
    cout << arr[i] << endl;
}


/*========== 用 pointer(指標) 印出整個陣列 ==========*/

// begin 指向的是 1 那個位置
// end 指向的是 5 後面沒有東西的那個位置
int *begin = arr + 0;
int *end = arr + len;

int *ptr;
for(ptr=begin ; ptr!=end ; ptr++){
    cout << *ptr << endl;   // 1, 2, 3, 4, 5
}

同樣要印出整個 Vector 也有兩個方法 :

int arr[] = {1, 2, 3, 4, 5};
vector<int> vec(arr, arr+5);    // vec = [1, 2, 3, 4, 5]
int len = vec.size();           // len = 5


/*========== 用 index 印出整個 Vector ==========*/

// 很簡單跟陣列一樣
for(int i=0 ; i<len ; i++){
    cout << vec[i] << endl;
}


/*========== 用 iterator 印出整個 Vector ==========*/


// begin 指向的是 1 那個位置
// end 指向的是 5 後面沒有東西的那個位置
vector<int>::iterator begin = vec.begin();
vector<int>::iterator end = vec.end();

vector<int>::iterator it;
for(it=begin ; it!=end ; it++){
    cout << *it << endl;
}

// 跟上面的指標比較一下
// 真的很像吧

這下大家可能會有一個疑惑惹,明明Iterator在使用上就比較麻煩,語法也比較複雜,為甚麼我們還要使用它呢? 因為有些強大ㄉ容器是不能使用operator存取ㄉ,像是 : set, map, list....

接下來Iterator還有很多用法,會在下一篇容器看到的🎮。

Last updated

Was this helpful?