国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

迭代器失效小結(jié)

2019-11-11 02:15:36
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

轉(zhuǎn)自:http://blog.163.com/guo_linda/blog/static/123773057201151033144945/

迭代器(iterator)是一個(gè)可以對(duì)其執(zhí)行類似指針的操作(如:解除引用(Operator*())和遞增(operator++()))的對(duì)象,我們可以將它理解成為一個(gè)指針。但它又不是我們所謂普通的指針,我們可以稱之為廣義指針,你可以通過(guò)sizeof(vector::iterator)來(lái)查看,所占內(nèi)存并不是4個(gè)字節(jié)。

    首先對(duì)于vector而言,添加和刪除操作可能使容器的部分或者全部迭代器失效。那為什么迭代器會(huì)失效呢?vector元素在內(nèi)存中是順序存儲(chǔ),試想:如果當(dāng)前容器中已經(jīng)存在了10個(gè)元素,現(xiàn)在又要添加一個(gè)元素到容器中,但是內(nèi)存中緊跟在這10個(gè)元素后面沒(méi)有一個(gè)空閑空間,而vector的元素必須順序存儲(chǔ)一邊索引訪問(wèn),所以我們不能在內(nèi)存中隨便找個(gè)地方存儲(chǔ)這個(gè)元素。于是vector必須重新分配存儲(chǔ)空間,用來(lái)存放原來(lái)的元素以及新添加的元素:存放在舊存儲(chǔ)空間的元素被復(fù)制到新的存儲(chǔ)空間里,接著插入新的元素,最后撤銷舊的存儲(chǔ)空間。這種情況發(fā)生,一定會(huì)導(dǎo)致vector容器的所有迭代器都失效。

我們看到實(shí)現(xiàn)上述所說(shuō)的分配和撤銷內(nèi)存空間的方式以實(shí)現(xiàn)vector的自增長(zhǎng)性,效率是極其低下的。為了使vector容器實(shí)現(xiàn)快速的內(nèi)存分配,實(shí)際分配的容器會(huì)比當(dāng)前所需的空間多一些,vector容器預(yù)留了這些額外的存儲(chǔ)區(qū),用來(lái)存放新添加的元素,而不需要每次都重新分配新的存儲(chǔ)空間。你可以從vector里實(shí)現(xiàn)capacity和reserve成員可以看出這種機(jī)制。

    capacity和size的區(qū)別:size是容器當(dāng)前擁有的元素個(gè)數(shù),而capacity則指容器在必須分配新存儲(chǔ)空間之前可以存儲(chǔ)的元素總數(shù)。

    vector迭代器的幾種失效的情況: 1.當(dāng)插入(push_back)一個(gè)元素后,end操作返回的迭代器肯定失效。 2.當(dāng)插入(push_back)一個(gè)元素后,capacity返回值與沒(méi)有插入元素之前相比有改變,則需要重新加載整個(gè)容器,此時(shí)first和end操作返回的迭代器都會(huì)失效。 3.當(dāng)進(jìn)行刪除操作(erase,pop_back)后,指向刪除點(diǎn)的迭代器全部失效;指向刪除點(diǎn)后面的元素的迭代器也將全部失效。

    deque迭代器的失效情況: 在C++PRimer一書(shū)中是這樣限定的: 1.在deque容器首部或者尾部插入元素不會(huì)使得任何迭代器失效。 2.在其首部或尾部刪除元素則只會(huì)使指向被刪除元素的迭代器失效。 3.在deque容器的任何其他位置的插入和刪除操作將使指向該容器元素的所有迭代器失效。但是:我在vs2005測(cè)試發(fā)現(xiàn)第一條都不滿足,不知為何?等以后深入STL以后慢慢的領(lǐng)會(huì)吧!

    只有l(wèi)ist的迭代器好像很少情況下會(huì)失效。也許就只是在刪除的時(shí)候,指向被刪除節(jié)點(diǎn)的迭代器會(huì)失效吧,其他的還沒(méi)有發(fā)現(xiàn)。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 蒙城县| 宣化县| 行唐县| 奈曼旗| 清水县| 民丰县| 颍上县| 昭平县| 太谷县| 汾阳市| 天镇县| 木里| 桑日县| 舟曲县| 东宁县| 乌鲁木齐市| 博乐市| 从江县| 肥西县| 册亨县| 娱乐| 泗洪县| 镇雄县| 顺义区| 茌平县| 德庆县| 南华县| 金沙县| 三门县| 白河县| 万载县| 东阳市| 托里县| 高密市| 浦江县| 京山县| 巫山县| 内江市| 隆安县| 手游| 中宁县|