《C++STL-數(shù)據(jù)結(jié)構(gòu)與算法實現(xiàn)》課件第五章_第1頁
《C++STL-數(shù)據(jù)結(jié)構(gòu)與算法實現(xiàn)》課件第五章_第2頁
《C++STL-數(shù)據(jù)結(jié)構(gòu)與算法實現(xiàn)》課件第五章_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

答:C++標(biāo)準(zhǔn)模板庫提供三種順序容器:vector,list和deque。vector類和deque類是以數(shù)組為基礎(chǔ)的,list類是以雙向鏈表為基礎(chǔ)的。矢量(vector)類提供了具有連續(xù)內(nèi)存地址的數(shù)據(jù)結(jié)構(gòu)。它和C/C++的數(shù)組一樣通過下標(biāo)運算符[]直接有效地訪問矢量的任何元素。與數(shù)組不同,vector的內(nèi)存用盡時,vector自動分配更大的連續(xù)內(nèi)存區(qū),將原先的元素復(fù)制到新的內(nèi)存區(qū),并釋放舊的內(nèi)存區(qū)。內(nèi)存分配由分配子(allocator)完成。矢量可以用來實現(xiàn)隊列、堆棧、列表和其他更復(fù)雜的結(jié)構(gòu)。vector支持隨機(jī)訪問迭代器。列表(list)是以雙向鏈表(doublylinkedlist)結(jié)構(gòu)的實現(xiàn)。支持的迭代器類型為雙向迭代器。雙端隊列(deque)(double-endedqueue)類。雙端隊列允許在隊列的兩端進(jìn)行操作。它是以順序表為基礎(chǔ)的,所以它能利用下標(biāo)提供有效的索引訪問,它支持隨機(jī)訪問迭代器。它放松了訪問的限制,對象既可從隊首進(jìn)隊,也可以從隊尾進(jìn)隊,同樣也可從任一端出隊。而且除了可從隊首和隊尾移走對象外,也支持通過使用下標(biāo)操作符“[]”進(jìn)行訪問。當(dāng)要增加雙端隊列的存儲空間時,可以在內(nèi)存塊中對deque兩端分別進(jìn)行分配。并且新分配的存儲空間保存為指向這些塊的指針數(shù)組,這樣雙端隊列可以利用不連續(xù)內(nèi)存空間。因此它的迭代比vector的迭代器更加智能化。為雙端隊列分配的存儲塊,往往要等刪除雙端隊列時才釋放,它比重復(fù)分配(再分配和釋放)更有效,但也更浪費內(nèi)存。使用雙端隊列容器類來實現(xiàn)vector容器類所能實現(xiàn)的各種數(shù)據(jù)結(jié)構(gòu)要更靈活,方便。2.下列成員函數(shù)是容器類所共有的函數(shù)成員和操作符作用缺省構(gòu)造函數(shù)容器類的默認(rèn)初始化拷貝構(gòu)造函數(shù)生成現(xiàn)有容器的副本析構(gòu)函數(shù)在不需要容器時整理內(nèi)容empty()當(dāng)容器內(nèi)的元素個數(shù)=0時返回turemax_size()返回容器最多可以容納的元素個數(shù)size()返回容器中當(dāng)前元素的個數(shù)容器賦值運算符=將一個容器賦給另外一個容器容器比較運算符><=>===!=兩個容器比較,條件成立返回true,不適應(yīng)與優(yōu)先隊列swap()交換兩個容器的元素3.容器適配器的內(nèi)部組織跟一般的順序容器沒有區(qū)別,只是在底層容器(UnderlyingAdapter)的基礎(chǔ)上進(jìn)行了封裝,并提供了若干新的成員函數(shù)作為接口來操作其內(nèi)部元素。4.答:四個關(guān)聯(lián)容器為:集合(set),多重集合(multiset),映射(map)和多重映射(multimap)。集合和多重集合類提供了控制數(shù)值集合的操作,其中數(shù)值是關(guān)鍵字,即不必另有一組值與每個關(guān)鍵字相關(guān)聯(lián)。集合與多重集合類的主要差別在于多重集合允許重復(fù)的關(guān)鍵字(key),而集合不允許重復(fù)的關(guān)鍵字。集合和多重集合通常實現(xiàn)為紅黑二叉排序樹。元素的順序由比較器函數(shù)對象(comparatorfunctionobject)確定。如對整型multiset,只要用函數(shù)對象less<int>排序關(guān)鍵字,元素即可按升序排列。映射和多重映射類提供了操作與關(guān)鍵字相關(guān)聯(lián)的映射值(mappedvalue)的方法。映射和多重映射的主要差別在于多重映射允許存放與映射值相關(guān)聯(lián)的重復(fù)關(guān)鍵字,而映射只允許存放與映射值一一對應(yīng)的單一關(guān)鍵字。多重集合關(guān)聯(lián)容器用于快速存儲和讀取關(guān)鍵字。多重映射和映射關(guān)聯(lián)容器類用于快速存儲和讀取關(guān)鍵字與相關(guān)值(關(guān)鍵字/數(shù)值對,key/valuepair)。5.容器底層數(shù)據(jù)結(jié)構(gòu)主要成員函數(shù)是否至此[]與at()數(shù)據(jù)插入方法數(shù)據(jù)刪除方法成員是否有序迭代器類型Vector動態(tài)數(shù)組End()Begin()Resize()Size()Capacity()Push_back()Insert()Pop_back()Erase()是push_back()

insert()erase()pop_back()clear()無Vector<T>::iteratoritDeque雙端隊列Pop_back()Pop_front()Erase()Push_back()Push_front()Insert()Size()是Push_back()Push_front()Insert()Pop_back()Pop_front()Erase()無deque<T>::iteratoritList雙向鏈表Push_back()Push_front()Insert()Pop_back()Pop_front()Erase()否Push_back()Push_front()Insert()Pop_back()Pop_front()Erase()無list<T>::iteratoritset紅黑樹Insert()Erase()Find()Upper_bound()Lower_bound()Count()Equal_range()否Insert()Erase()有Set<T>::iteratoritMap紅黑樹Insert()Emplace()Erase()Find()[]Insert()Erase()有Map<T1,T2>::iteratoritUnordered_set哈希表empty()size()max_size()find()bucket()rehash()insert()equal()count()否Insert()Erase()無Unordered_set<T>::iteratorit6.vector的成員函數(shù)erase()在執(zhí)行完后,迭代器依然指向原位,但是由于原

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論