1. 程式人生 > >iterator迭代器 和 指標的 區別

iterator迭代器 和 指標的 區別

原文:https://blog.csdn.net/gogokongyin/article/details/51206225

迭代器與指標的差別:

迭代器:
      (1)迭代器不是指標,是類模板,表現的像指標。他只是模擬了指標的一些功能,通過過載了指標的一些操作符,->,*,++ --等封裝了指標,是一個“可遍歷STL( Standard Template Library)容器內全部或部分元素”的物件, 本質是封裝了原生指標,是指標概念的一種提升(lift),提供了比指標更高階的行為,相當於一種智慧指標,他可以根據不同型別的資料結構來實現不同的++,--等操作;
      (2)迭代器返回的是物件引用而不是物件的值,所以cout只能輸出迭代器使用*取值後的值而不能直接輸出其自身。
      (3)在設計模式中有一種模式叫迭代器模式

,簡單來說就是提供一種方法,在不需要暴露某個容器的內部表現形式情況下,使之能依次訪問該容器中的各個元素,這種設計思維在STL中得到了廣泛的應用,是STL的關鍵所在,通過迭代器,容器和演算法可以有機的粘合在一起,只要對演算法給予不同的迭代器,就可以對不同容器進行相同的操作
     

  ite=find(vec.begin(),vec.end(),88);
    vec.insert(ite,2,77);  //迭代器標記的位置前,插入資料;
    cout<<*ite<<endl;  //會崩潰,因為迭代器在使用後就釋放了,*ite的時候就找不到它的地址了;


        注:迭代器在使用後就釋放了,不能再繼續使用,但是指標可以!!??????????

指標:
        指標能指向函式而迭代器不行,迭代器只能指向容器;指標是迭代器的一種。指標只能用於某些特定的容器;迭代器是指標的抽象和泛化。所以,指標滿足迭代器的一切要求。
        總之,指標和迭代器是有很大差別的,雖然他們表現的行為相似,但是本質是不一樣的!一個是類模板,一個是存放一個傢伙的地址的指標變數。