指針和迭代器的區別:
迭代器:
? ? ? (1)迭代器不是指針,是類模板,表現的像指針。他只是模擬了指針的一些功能,通過重載了指針的一些操作符,->,*,++ --等封裝了指針,是一個“可遍歷STL( Standard Template Library)容器內全部或部分元素”的對象,?本質是封裝了原生指針,是指針概念的一種提升(lift),提供了比指針更高級的行為,相當于一種智能指針,他可以根據不同類型的數據結構來實現不同的++,--等操作;
? ? ? (2)迭代器返回的是對象引用而不是對象的值,所以cout只能輸出迭代器使用*取值后的值而不能直接輸出其自身。
? ? ? (3)在設計模式中有一種模式叫迭代器模式,簡單來說就是提供一種方法,在不需要暴露某個容器的內部表現形式情況下,使之能依次訪問該容器中的各個元素,這種設計思維在STL中得到了廣泛的應用,是STL的關鍵所在,通過迭代器,容器和算法可以有機的粘合在一起,只要對算法給予不同的迭代器,就可以對不同容器進行相同的操作。
? ? ? ?(4)在用迭代器執行erase,insert等函數時,迭代器的指針會被釋放掉,從而不能繼續使用,如果繼續使用,則會報錯;
指針:
? ? ? ??指針能指向函數而迭代器不行,迭代器只能指向容器;指針是迭代器的一種。指針只能用于某些特定的容器;迭代器是指針的抽象和泛化。所以,指針滿足迭代器的一切要求。
? ? ??? 總之,指針和迭代器是有很大差別的,雖然他們表現的行為相似,但是本質是不一樣的!一個是類模板,一個是存放一個家伙的地址的指針變量。
?