網(wǎng)站建設(shè)一對一培訓(xùn)seo根據(jù)什么具體優(yōu)化
前言
今天主要講類相關(guān)概念。
構(gòu)造和析構(gòu)函數(shù)是否可以拋出異常
在構(gòu)造函數(shù)中拋出異常,控制權(quán)會轉(zhuǎn)出構(gòu)造函數(shù)之外,對象的析構(gòu)函數(shù)不會被調(diào)用,造成內(nèi)存泄漏。
如果析構(gòu)函數(shù)中拋出異常,而且沒有在當(dāng)?shù)夭蹲?#xff0c;析構(gòu)函數(shù)便執(zhí)行不全。
類如何實現(xiàn)只能靜態(tài)或動態(tài)分配
只能靜態(tài)分配,把new\delete 運(yùn)算符重載為private屬性
只能動態(tài)分配,把構(gòu)造和析構(gòu)函數(shù)設(shè)置為protect屬性,用子類動態(tài)創(chuàng)建。
什么時候需要初始化列表
初始化引用成員變量,初始化const成員變量,調(diào)用有一組參數(shù)的基類構(gòu)造函數(shù)、調(diào)用有一組參數(shù)的成員構(gòu)造函數(shù)。
哪些函數(shù)不能是虛函數(shù)
構(gòu)造函數(shù)、內(nèi)聯(lián)函數(shù)、靜態(tài)函數(shù)、友元函數(shù)、普通函數(shù)
簡單介紹STL
STL一共提供六大組件,有容器、算法、迭代器、仿函數(shù)、配接器、配置器,彼此可以組合套用,容器通過配置器取得存儲空間,算法通過迭代器存取容器內(nèi)容,仿函數(shù)協(xié)助算法完成不同策略,配接器可以應(yīng)用于容器。
容器是封裝好的各種數(shù)據(jù)結(jié)構(gòu)。
算法是各種常用的算法,可以對容器內(nèi)的數(shù)據(jù)操作。
迭代器是將一些指針相關(guān)操作重載的類模板。
仿函數(shù)是一種重載了()的類模板,可以幫助算法實現(xiàn)不同策略
配接器用來修飾容器
配置器負(fù)責(zé)空間配置與管理。
vector
也叫動態(tài)數(shù)組,是線性存儲的。隨著元素的加入,內(nèi)部機(jī)制會自動擴(kuò)充空間以容納新元素。當(dāng)有新元素加入時,如果空間足夠則直接插入,如果空間不足,則容量擴(kuò)充至兩倍。擴(kuò)充是重新申請一塊連續(xù)空間,將原有的數(shù)據(jù)拷貝到新空間中,擴(kuò)充后,原有的迭代器會失效。
list
list是一個雙向鏈表,每次插入或刪除一個元素,原有的迭代器不會失效。
deque
deque是一種雙向開口的連續(xù)線性空間,支持從頭尾兩端進(jìn)行元素插入或刪除操作。deque動態(tài)的以分段連續(xù)空間組合而成,隨時可以添加一段新的空間并連接起來。
stack
是一種先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu),只有一個出口,允許從最頂端增加或刪除元素。
queue
是一種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),允許從最底端加入元素,從頂端取得元素。
heap
不屬于STL組件,而是作為priority_queue的助手,priority_queue 允許用戶以任何次序?qū)⒃赝迫肴萜?#xff0c;取出時一定是從優(yōu)先級最高的元素開始取。
map和set
map和set都是關(guān)聯(lián)容器,底層是紅黑樹。
map中的元素是鍵值對,關(guān)鍵字起索引的作用,值表示與索引相關(guān)的數(shù)據(jù)。map允許修改值,不允許修改鍵。支持下標(biāo)訪問,如不存在,則加入對應(yīng)的鍵值對。
set是關(guān)鍵字的集合,set每個元素只包含鍵,不允許修改。
stl迭代器刪除元素
vector和deque使用erase后,后面每個元素的迭代器都會失效,erase后返回下一個有效的迭代器。
map和set使用erase后,當(dāng)前元素迭代器失效,不影響下一個元素的迭代器。
list使用erase后不影響下一個元素的迭代器,同時也會返回下一個有效的迭代器。
迭代器的作用
迭代器用于提供一種方法順序訪問一個聚合對象中各個元素,而不需要暴露該對象的內(nèi)部表示。
迭代器不是指針,是類模板,表現(xiàn)得像指針,模擬了指針的一些功能,封裝了原生指針,提供比指針更高級的功能。
resize和reserve
resize改變?nèi)萜鲀?nèi)含有元素的數(shù)量。當(dāng),原來的size小于resize的值,則容器新增reszie-size個元素,元素的值默認(rèn)為0。
reserve用于改變?nèi)萜鞯淖畲笕萘?#xff0c;不會生成元素,如果reseve的值大于capacity,則重寫申請一塊足夠的內(nèi)存,把原有的對象復(fù)制過來,銷毀之前的內(nèi)存。
后記
雄關(guān)漫道,過關(guān)斬將,你的努力不會白費(fèi)。