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