STL中迭代器的作用,有指针为何还要迭代器
請你來說一下STL中迭代器的作用,有指針為何還要迭代器
參考回答:
1、迭代器
Iterator(迭代器)模式又稱Cursor(游標)模式,用于提供一種方法順序訪問一個聚合對象中各個元素,?而又不需暴露該對象的內部表示?;蛘哌@樣說可能更容易理解:Iterator模式是運用于聚合對象的一種模?式,通過運用該模式,使得我們可以在不知道對象內部表示的情況下,按照一定順序(由iterator提供的?方法)訪問聚合對象中的各個元素。
?
由于Iterator模式的以上特性:與聚合對象耦合,在一定程度上限制了它的廣泛運用,一般僅用于底層聚合支持類,如STL的list、vector、stack等容器類及ostream_iterator等擴展iterator。
2、迭代器和指針的區別
迭代器不是指針,是類模板,表現的像指針。他只是模擬了指針的一些功能,重載了指針的一些操作符,->、*、++、--等。迭代器封裝了指針,是一個“可遍歷STL( Standard Template Library)容器內全部或部分元素”的對象,本質是封裝了原生指針,是指針概念的一種提升(lift),提供了比指針更高級的行為,相當于一種智能指針,他可以根據不同類型的數據結構來實現不同的++,--等操作。
迭代器返回的是對象引用而不是對象的值,所以cout只能輸出迭代器使用*取值后的值而不能直接輸出其自身。
3、迭代器產生原因
Iterator類的訪問方式就是把不同集合類的訪問邏輯抽象出來,使得不用暴露集合內部的結構而達到循環遍歷集合的效果。
?4.為什么有了指針還要迭代器
1、通過迭代器訪問容器,可以避免許多錯誤,同時還能隱藏容器的具體實現。
2、迭代器可以保證對所有容器的基本遍歷方式,都是一樣的,實現算法時若需要遍歷,則使用迭代器,則可以不用關注容器的具體類型,實現數據結構和算法的分離。
3、迭代器本身有很多優點,可以彌補C++語言的不足,比如它的iterator_category,可以得到迭代器所指向的類別,這樣可以根據不同的類別的特性,提供不同的算法。
迭代器是一種抽象的設計概念,在設計模式一書中的定義為:提供一種方法,使之能夠依序的訪問某個聚合物(容器)中所含的各個元素,而又不需要暴露該聚合物中的內部實現細節。也就是說迭代器能夠訪問容器內部實現,而不需要管容器中是怎么實現的。
STL中將容器與算法分開實現,容器負責數據的存儲,算法代表著用系統的方法描述解決問題的策略機制。也就是說一個輸入-處理-輸出的流程,其中在處理過程中就需要對輸入的數據能夠進行讀取或者修改等。而算法中的輸入為某些容器時,算法可能就需要知道容器能夠提供對其的訪問函數。但是每個容器的訪問函數都不一定相同,這時候如果針對每一個容器,算法都需要有特定的版本,這樣會造成大量的代碼冗余。那么怎么辦呢?
我們可以在容器與算法之間,用迭代器將其撮合在一起,算法通過迭代器來訪問容器,而無需關心容器內的具體實現。通過設計一個抽象的迭代器接口定義一個統一的實現方式。由于每一個容器中的內部存儲模式都不一樣,因此對于每一個類別的容器都需要有一個專屬迭代器來完成對數據的訪問,該迭代器繼承并實現于抽象的迭代器接口。
總結
以上是生活随笔為你收集整理的STL中迭代器的作用,有指针为何还要迭代器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汉字为什么能流传至今_女皇武则天自创18
- 下一篇: nutch爬虫原来是这样操作的!