標題:
STL 容器6_iterator
[打印本頁]
作者:
鄭繼威
時間:
2024-7-8 17:15
標題:
STL 容器6_iterator
本帖最後由 鄭繼威 於 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。
作者:
李宗儒
時間:
2024-7-8 17:45
此帖僅作者可見
歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://istak.org.tw/seed/)
Powered by Discuz! 7.2