返回列表 發帖

STL 容器6_iterator

本帖最後由 鄭繼威 於 2024-7-8 17:18 編輯

iterator 像是一個比較聰明的 pointer,可以指到容器內任何一個位置,然後操作那個位置的資料。
例:
要印出整個陣列有兩個方法 :
// 假如有一個陣列長這樣
// len = 5
  1. int arr[] = {1, 2, 3, 4, 5};
  2. int len = sizeof(arr) / sizeof(int);
複製代碼
/*========== 用 index 印出整個陣列 ==========*/

// 很簡單,應該也是大家最常用的方法
  1. for(int i=0 ; i<len ; i++){
  2.     cout << arr << endl;
  3. }
複製代碼
/*========== 用 pointer 印出整個陣列 ==========*/

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

  3. int *ptr;
  4. for(ptr=begin ; ptr!=end ; ptr++){
  5.     cout << *ptr << endl;   // 1, 2, 3, 4, 5
  6. }
複製代碼
同樣要印出整個 Vector 也有兩個方法 :
  1. int arr[] = {1, 2, 3, 4, 5};
  2. vector<int> vec(arr, arr+5);    // vec = [1, 2, 3, 4, 5]
  3. int len = vec.size();           // len = 5
複製代碼
/*========== 用 index 印出整個 Vector ==========*/
// 很簡單跟陣列一樣
  1. for(int i=0 ; i<len ; i++){
  2.     cout << vec[i] << endl;
  3. }
複製代碼
/*========== 用 iterator 印出整個 Vector ==========*/
// begin 指向的是 1 那個位置
// end 指向的是 5 後面沒有東西的那個位置
  1. vector<int>::iterator begin = vec.begin();
  2. vector<int>::iterator end = vec.end();

  3. vector<int>::iterator it;
  4. for(it=begin ; it!=end ; it++){
  5.     cout << *it << endl;
  6. }
複製代碼
// 跟上面的指標比較一下
// 真的很像吧~
/*
    用 vector<int>::iterator 宣告出來的是 vector<int> 的 iterator
    就像用 int* 宣告出來的是一個指向 int 的指標
    雖然 iterator 的宣告比較麻煩
    但概念 iterator 上跟 pointer 是很接近的
*/
如果只是要印出 vector 用 vec[index] 就可以了
但不是每個 STL Container 都像 vector
可以用 vec[index] 取得任意位置的值
而且還有很多操作也會需要 iterator。

此帖僅作者可見

TOP

返回列表