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