STL中迭代器的作用,有指標為何還要迭代器

2021-09-26 11:02:51 字數 681 閱讀 6552

1、迭代器

iterator(迭代器)模式又稱cursor(游標)模式,用於提供一種方法順序訪問乙個聚合物件中各個元素, 而又不需暴露該物件的內部表示。或者這樣說可能更容易理解:iterator模式是運用於聚合物件的一種模式,通過運用該模式,使得我們可以在不知道物件內部表示的情況下,按照一定順序(由iterator提供的方法)訪問聚合物件中的各個元素。

由於iterator模式的以上特性:與聚合物件耦合,在一定程度上限制了它的廣泛運用,一般僅用於底層聚合支援類,如stl的list、vector、stack等容器類及ostream_iterator等擴充套件iterator。

2、迭代器和指標的區別

迭代器不是指標,是類模板,表現的像指標。他只是模擬了指標的一些功能,通過過載了指標的一些操作符,->、*、++、--等。迭代器封裝了指標,是乙個「可遍歷stl( standard template library)容器內全部或部分元素」的物件, 本質是封裝了原生指標,是指標概念的一種提公升(lift),提供了比指標更高階的行為,相當於一種智慧型指標,他可以根據不同型別的資料結構來實現不同的++,--等操作。

迭代器返回的是物件引用而不是物件的值,所以cout只能輸出迭代器使用*取值後的值而不能直接輸出其自身。

3、迭代器產生原因

iterator類的訪問方式就是把不同集合類的訪問邏輯抽象出來,使得不用暴露集合內部的結構而達到迴圈遍歷集合的效果。

STL中的迭代器分類

五類迭代器如下 1 輸入迭代器 唯讀,一次傳遞 為輸入迭代器預定義實現只有istream iterator和istreambuf iterator,用於從乙個輸入流istream中讀取。乙個輸入迭代器僅能對它所選擇的每個元素進行一次解析,它們只能向前移動。乙個專門的建構函式定義了超越末尾的值。總是,...

STL中iterator迭代器

1 標頭檔案 所有容器有含有其各自的迭代器型別 iterator types 所以當你使用一般的容器迭代器時,並不需要含入專門的標頭檔案。不過有幾種特別的迭代器,例如逆向迭代器,被定義於中。2 迭代器型別 迭代器共分為五種,分別為 input iterator output iterator for...

STL中迭代器失效問題

對於vector deque等連續儲存的容器來說,插入元素 insert 或者刪除元素 erase 會導致後邊的迭代器都失效,解決方法是,erase iter 會返回下乙個有效迭代器的值,刪除元素時用將當前迭代器賦值為erase的返回值,系統會自動將迭代器的指向修改的。for iter cont.b...