版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、本文格式為word版,下載可任意編輯【c+stl筆試題】java筆試題 stl(standard template library,標(biāo)準(zhǔn)模板庫(kù)), stl的代碼從廣義上講分為三類:algorithm(算法)、container(容器)和iterator(迭代器),并包括一些工具類如auto_ptr。幾乎全部的代碼都采納了模板類和模板函數(shù)的方式,這相比于傳統(tǒng)的由函數(shù)和類組成的庫(kù)來說供應(yīng)了更好的代碼重用機(jī)會(huì)。下面就由我為大家介紹一下c+stl筆試題的文章,歡迎閱讀。 c+stl筆試題篇1 1.c+ stl 之所以得到廣泛的贊譽(yù),也被許多人使用,不只是供應(yīng)了像vector, string, list
2、等便利的容器,更重要的是stl封裝了很多簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)算法和大量常用數(shù)據(jù)結(jié)構(gòu)操作。vector封裝數(shù)組,list封裝了鏈表,map和set封裝了二叉樹等 2.標(biāo)準(zhǔn)關(guān)聯(lián)容器set, multiset, map, multimap內(nèi)部采納的就是一種特別高效的平衡檢索二叉樹:紅黑樹,也成為rb樹(red-blacktree)。rb樹的統(tǒng)計(jì)性能要好于一般的平衡二叉樹 3.stl map和set的使用雖不簡(jiǎn)單,但也有一些不易理解的地方,如: map: type pair,許多不同的const key對(duì)應(yīng)的t對(duì)象的一個(gè)集合,全部的記錄集中只要const key 不一樣就可以,t無關(guān)! set: type
3、const key. 只存單一的對(duì)const key,沒有map 的t對(duì)像!可以看成map的一個(gè)特例 (1)為何map和set的插入刪除效率比用其他序列容器高?,樹 答:由于對(duì)于關(guān)聯(lián)容器來說,不需要做內(nèi)存拷貝和內(nèi)存移動(dòng)。說對(duì)了,的確如此。map和set容器內(nèi)全部元素都是以節(jié)點(diǎn)的方式來存儲(chǔ),其節(jié)點(diǎn)結(jié)構(gòu)和鏈表差不多,指向父節(jié)點(diǎn)和子節(jié)點(diǎn) (2)為何每次insert之后,以前保存的iterator不會(huì)失效? 答:iterator這里就相當(dāng)于指向節(jié)點(diǎn)的指針,內(nèi)存沒有變,指向內(nèi)存的指針怎么會(huì)失效呢(當(dāng)然被刪除的那個(gè)元素本身已經(jīng)失效了)。相對(duì)于vector來說,每一次刪除和插入,指針都有可能失效,調(diào)用pus
4、h_back在尾部插入也是如此。由于為了保證內(nèi)部數(shù)據(jù)的連續(xù)存放,iterator指向的那塊內(nèi)存在刪除和插入過程中可能已經(jīng)被其他內(nèi)存掩蓋或者內(nèi)存已經(jīng)被釋放了。即使時(shí)push_back的時(shí)候,容器內(nèi)部空間可能不夠,需要一塊新的更大的內(nèi)存,只有把以前的內(nèi)存釋放,申請(qǐng)新的更大的內(nèi)存,復(fù)制已有的數(shù)據(jù)元素到新的內(nèi)存,最終把需要插入的元素放到最終,那么以前的內(nèi)存指針自然就不行用了。特殊時(shí)在和find等算法在一起使用的時(shí)候,.這個(gè)原則:不要使用過期的iterator。 (3)為何map和set不能像vector一樣有個(gè)reserve函數(shù)來預(yù)安排數(shù)據(jù)? 答:我以前也這么問,究其原理來說時(shí),引起它的緣由在于在ma
5、p和set內(nèi)部存儲(chǔ)的已經(jīng)不是元素本身了,而是包含元素的節(jié)點(diǎn)。也就是說map內(nèi)部使用的alloc并不是map聲明的時(shí)候從參數(shù)中傳入的alloc。例如: 4.set, multiset set和multiset會(huì)依據(jù)特定的排序準(zhǔn)則自動(dòng)將元素排序,set中元素不允許重復(fù),multiset可以重復(fù)。 由于是排序的,所以set中的元素不能被修改,只能刪除后再添加。 向set中添加的元素類型必需重載操作符用來排序。排序滿意以下準(zhǔn)則: 1、非對(duì)稱,若a 2、可傳遞,若a 3、a set中推斷元素是否相等: if(!(a c+stl筆試題篇2 1.map,multimap map和multimap將key和v
6、alue組成的pair作為元素,依據(jù)key的排序準(zhǔn)則自動(dòng)將元素排序,map中元素的key不允許重復(fù),multimap可以重復(fù)。 map 由于是排序的,所以map中元素的key不能被修改,只能刪除后再添加。key對(duì)應(yīng)的value可以修改。 向map中添加的元素的key類型必需重載操作符用來排序。排序與set規(guī)章全都。 2. list的功能方法 實(shí)際上有兩種list: 一種是基本的arraylist,其優(yōu)點(diǎn)在于隨機(jī)訪問元素,另一種是更強(qiáng)大的linkedlist,它并不是為快速隨機(jī)訪問設(shè)計(jì)的,而是具有一套更通用的方法。 list : 次序是list最重要的特點(diǎn):它保證維護(hù)元素特定的挨次。list為c
7、ollection添加了很多方法,使得能夠向list中間插入與移除元素(這只推舉linkedlist使用。)一個(gè)list可以生成listiterator,使用它可以從兩個(gè)方向遍歷list,也可以從list中間插入和移除元素。 arraylist : 由數(shù)組實(shí)現(xiàn)的list。允許對(duì)元素進(jìn)行快速隨機(jī)訪問,但是向list中間插入與移除元素的速度很慢。listiterator只應(yīng)當(dāng)用來由后向前遍歷arraylist,而不是用來插入和移除元素。由于那比linkedlist開銷要大許多。 linkedlist : 對(duì)挨次訪問進(jìn)行了優(yōu)化,向list中間插入與刪除的開銷并不大。隨機(jī)訪問則相對(duì)較慢。(使用arra
8、ylist代替。)還具有下列方法:addfirst(), addlast(), getfirst(),getlast(), removefirst() 和 removelast(), 這些方法 (沒有在任何接口或基類中定義過)使得linkedlist可以當(dāng)作堆棧、隊(duì)列和雙向隊(duì)列使用 3.1 hash_map和map的區(qū)分在哪里? 構(gòu)造函數(shù)。hash_map需要hash函數(shù),等于函數(shù);map只需要比較函數(shù)(小于函數(shù)). 存儲(chǔ)結(jié)構(gòu)。hash_map采納hash表存儲(chǔ),map一般采納紅黑樹(rb tree)實(shí)現(xiàn)。因此其memory數(shù)據(jù)結(jié)構(gòu)是不一樣的。 3.2 什么時(shí)候需要用hash_map,什么時(shí)候
9、需要用map? 總體來說,hash_map 查找速度會(huì)比map快,而且查找速度基本和數(shù)據(jù)數(shù)據(jù)量大小,屬于常數(shù)級(jí)別;而map的查找速度是log(n)級(jí)別。并不肯定常數(shù)就比log(n)小,hash還有hash函數(shù)的耗時(shí),明白了吧,假如你考慮效率,特殊是在元素達(dá)到肯定數(shù)量級(jí)時(shí),考慮考慮hash_map。但若你對(duì)內(nèi)存使用特殊嚴(yán)格,盼望程序盡可能少消耗內(nèi)存,那么肯定要當(dāng)心,hash_map可能會(huì)讓你陷入尷尬,特殊是當(dāng)你的hash_map對(duì)象特殊多時(shí),你就更無法掌握了,而且hash_map的構(gòu)造速度較慢。 現(xiàn)在知道如何選擇了嗎?權(quán)衡三個(gè)因素: 查找速度, 數(shù)據(jù)量, 內(nèi)存使用。 c+stl筆試題篇3 1.一
10、些使用上的建議: level 1 - 僅僅作為map使用:采納靜態(tài)數(shù)組 level 2 - 保存定長(zhǎng)數(shù)據(jù),使用時(shí)也是全部遍歷:采納動(dòng)態(tài)數(shù)組(長(zhǎng)度一開頭就固定的話靜態(tài)數(shù)組也行) level 3 - 保存不定長(zhǎng)數(shù)組,需要?jiǎng)討B(tài)增加的力量,側(cè)重于查找數(shù)據(jù)的速度:采納vector level 3 - 保存不定長(zhǎng)數(shù)組,需要?jiǎng)討B(tài)增加的力量,側(cè)重于增加刪除數(shù)據(jù)的速度:采納list level 4 - 對(duì)數(shù)據(jù)有簡(jiǎn)單操作,即需要前后增刪數(shù)據(jù)的力量,又要良好的數(shù)據(jù)訪問速度:采納deque level 5 - 對(duì)數(shù)據(jù)中間的增刪操作比較多:采納list,建議在排序的基礎(chǔ)上,批量進(jìn)行增刪可以對(duì)運(yùn)行效率供應(yīng)最大的保證 le
11、vel 6 - 上述中找不到適合的:組合stl容器或者自己建立特別的數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn) 2. (1).vector - 會(huì)自動(dòng)增長(zhǎng)的數(shù)組 vectorvec(10) /一個(gè)有10個(gè)int元素的容器 vector vec(10, 0.5)/一個(gè)有10個(gè)float元素的容器,并且他們得值都是0.5 vector:iterator iter; for(iter = vec.begin(); iter != vec.end(); iter+) /. . . . . . . vector由于數(shù)組的增長(zhǎng)只能向前,所以也只供應(yīng)了后端插入和后端刪除, 也就是push_back和pop_back。當(dāng)然在前端和中間要
12、操作數(shù)據(jù)也是可以的, 用insert和erase,但是前端和中間對(duì)數(shù)據(jù)進(jìn)行操作必定會(huì)引起數(shù)據(jù)塊的移動(dòng), 這對(duì)性能影響是特別大的。 最大的優(yōu)勢(shì)就是隨機(jī)訪問的力量。 vector:iterator相關(guān)的方法有: begin():用來獲得一個(gè)指向vector第一個(gè)元素的指針 end():用來獲得一個(gè)指向vector最終一個(gè)元素之后的那個(gè)位置的指針,留意不是指向最終一個(gè)元素。 erase(vector:iterator):用來刪除作為參數(shù)所傳入的那個(gè)iterator所指向的那個(gè)元素。 (2).list - 擅長(zhǎng)插入刪除的鏈表 listmilkshakes; list scores; push_back
13、, pop_backpush_front. pop_front list是一個(gè)雙向鏈表的實(shí)現(xiàn)。 為了供應(yīng)雙向遍歷的力量,list要比一般的數(shù)據(jù)單元多出兩個(gè)指向前后的指針 一個(gè)使用iterator來刪除元素的例子 list stringlist; list:iterator iter; advance(iter, 5); /將iterator指向stringlist的第五個(gè)元素 stringlist.erase(iterator);/刪除 那么刪除操作進(jìn)行以后,傳入erase()方法的iterator指向哪里了呢?它指向了刪除操作前所指向的那個(gè)元素的后一個(gè)元素。 (3).deque - 擁有vector和list兩者優(yōu)點(diǎn)的雙端隊(duì)列 (4).這三個(gè)模板的總結(jié) 比較和一般使用準(zhǔn)則 這三個(gè)模板都屬于序列類模板,可以看到他們有一些通用方法 size():得到容器大小 begin():得到指向容器內(nèi)第一個(gè)元素的指針(這個(gè)指針的類型依容器的不同而不同) end():得到指向容器內(nèi)最終一個(gè)元素之后一個(gè)位置的指針 erase():刪除傳入指針指向的那個(gè)元素 clear():清除全部的元素 =運(yùn)算符:推斷兩個(gè)容器是否相等 =運(yùn)算符:用來給容器賦值 上面的三個(gè)模
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能硬件創(chuàng)新企業(yè)評(píng)審
- 國(guó)際工藝品設(shè)備租賃協(xié)議
- 通信設(shè)備運(yùn)輸招投標(biāo)文件
- 會(huì)員消費(fèi)IC卡積分規(guī)則
- 無人機(jī)駕駛員聘用合同范本
- 執(zhí)行院務(wù)公開管理辦法
- 鐵路工程供貨施工合同范本
- 金屬材料采購(gòu)授權(quán)委托書
- 通訊設(shè)備項(xiàng)目獎(jiǎng)勵(lì)政策
- 煤炭供應(yīng)商運(yùn)輸合作協(xié)議
- GB/T 19418-2003鋼的弧焊接頭缺陷質(zhì)量分級(jí)指南
- 高中語文文言文斷句課件
- 義務(wù)教育歷史課程標(biāo)準(zhǔn)(2022年版)【重新整理版】
- 2023屆新高考二卷語文點(diǎn)對(duì)點(diǎn)攻關(guān)訓(xùn)練專題:文學(xué)類文本閱讀
- 2023-計(jì)算機(jī)考研408真題及答案
- 福建省寧德市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名明細(xì)及行政區(qū)劃代碼
- 垃圾焚燒鍋爐系統(tǒng)安裝方案
- 應(yīng)急物資臺(tái)賬新參考模板范本
- 足球裁判規(guī)則PPT
- 中藥的用法課件
- 【課件】第15課 中國(guó)古代陶瓷藝術(shù) 課件高中美術(shù)魯美版美術(shù)鑒賞
評(píng)論
0/150
提交評(píng)論