九九乘法表 C 的vector是怎么實(shí)現(xiàn)的?是靠鏈表嗎?
C 的vector是怎么實(shí)現(xiàn)的?是靠鏈表嗎?這個要去翻源碼了,STL里的代碼說實(shí)話,真的看不太懂。如果不是太糾結(jié)于具體細(xì)節(jié),可以簡單講講基本的實(shí)現(xiàn)思路,大致如下:1.vector從功能上來講,屬于順
C 的vector是怎么實(shí)現(xiàn)的?是靠鏈表嗎?
這個要去翻源碼了,STL里的代碼說實(shí)話,真的看不太懂。
如果不是太糾結(jié)于具體細(xì)節(jié),可以簡單講講基本的實(shí)現(xiàn)思路,大致如下:
1.vector從功能上來講,屬于順序存儲容器,所以底層實(shí)現(xiàn)一般基于數(shù)組。
2.vector使用模板元編程技術(shù)實(shí)現(xiàn),具體一點(diǎn)就是編譯器根據(jù)使用時(shí)指定的實(shí)際類型在編譯時(shí)執(zhí)行模板特化,編譯出對應(yīng)的代碼。也就是說vector
3.vector的重要特性之一就是實(shí)現(xiàn)了數(shù)組的動態(tài)遞增。簡單來說就是容器內(nèi)部記錄當(dāng)前的足最大容量和使用量。當(dāng)添加元素的時(shí)候,如果容器類發(fā)現(xiàn)當(dāng)前的容量已耗盡,容器類會自動地重新分配一個更大容量的數(shù)組,把當(dāng)前的所有元素copy過去,然后釋放掉舊的數(shù)組,從而實(shí)現(xiàn)動態(tài)自增,這一切對使用者來說完全透明。
4.vector提供迭代器來提供統(tǒng)一的遍歷訪問接口,方便與STL中的其它組件進(jìn)行交互。
這其中會有很多的細(xì)節(jié),比如:
1.是否允許vector在必要時(shí)縮小自身容量?
2.vector容量耗盡后的遞增量是多少?
3.是否應(yīng)該提供線程安全容器?
有些東西可能真的需要去翻源碼去看才能搞明白?;蛘呖梢詤⒖己罱莸摹禨TL源碼剖析》。其實(shí)vector本身的實(shí)現(xiàn)并不會太復(fù)雜,它的實(shí)現(xiàn)思路也很簡單,但是設(shè)計(jì)層面的一些取舍就需要經(jīng)過仔細(xì)考量了。一般來說,STL是一個足夠堅(jiān)實(shí)的后盾,我們會頻繁地使用它,以構(gòu)建健壯高效的軟件。能夠理解STL里的一些設(shè)計(jì)思想和實(shí)現(xiàn)方式,對提高我們的編程思維和編程能力會所幫助。