本帖最後由 鄭繼威 於 2024-7-8 17:18 編輯
iterator 像是一個比較聰明的 pointer,可以指到容器內任何一個位置,然後操作那個位置的資料。
例:
要印出整個陣列有兩個方法 :
// 假如有一個陣列長這樣
// len = 5- int arr[] = {1, 2, 3, 4, 5};
- int len = sizeof(arr) / sizeof(int);
複製代碼 /*========== 用 index 印出整個陣列 ==========*/
// 很簡單,應該也是大家最常用的方法- for(int i=0 ; i<len ; i++){
- cout << arr << 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;
- }
複製代碼 // 跟上面的指標比較一下
// 真的很像吧~
/*
用 vector<int>::iterator 宣告出來的是 vector<int> 的 iterator
就像用 int* 宣告出來的是一個指向 int 的指標
雖然 iterator 的宣告比較麻煩
但概念 iterator 上跟 pointer 是很接近的
*/
如果只是要印出 vector 用 vec[index] 就可以了
但不是每個 STL Container 都像 vector
可以用 vec[index] 取得任意位置的值
而且還有很多操作也會需要 iterator。 |