sarscape 将dem文件转化成stl_STL源码剖析 阅读笔记(一)介绍
一、學(xué)習(xí)動(dòng)機(jī)
對(duì)C++的理解:最近因?yàn)楣ぷ髟蛐枰匦聦?duì)C++進(jìn)行學(xué)習(xí),而上一次系統(tǒng)、全局的學(xué)習(xí)C++已經(jīng)是在本科時(shí)期了,然后是讀研期間的第一年學(xué)過(guò)一點(diǎn)皮毛,后來(lái)對(duì)C++的學(xué)習(xí)都是邊用邊學(xué)??v然這樣已經(jīng)足夠我解決大多數(shù)開發(fā)和業(yè)務(wù)上的問(wèn)題了,但是沒(méi)有真正對(duì)其底層進(jìn)行深入研究,還是無(wú)法說(shuō)真正學(xué)會(huì)了這個(gè)語(yǔ)言或者對(duì)這個(gè)語(yǔ)言足夠“熟悉”。
對(duì)語(yǔ)言底層的理解:在入行以來(lái),其實(shí)學(xué)過(guò)很多語(yǔ)言,諸如VB、C、C++、Java、HTML、CSS、JS、Python等??梢哉f(shuō)想快速上手一門語(yǔ)言進(jìn)行開發(fā)工作對(duì)我而言不是什么問(wèn)題了,然而關(guān)于各種不同語(yǔ)言的相同點(diǎn)和異同點(diǎn),底層的一些基本模型,我其實(shí)也并未過(guò)多的深究。
對(duì)實(shí)現(xiàn)細(xì)節(jié)的理解:讀研期間做深度學(xué)習(xí)和算法,為了快速實(shí)現(xiàn)功能,主要使用的是Python。眾所周知,Python的語(yǔ)言難度低,易用性高。雖然開發(fā)人員使用方便,但也隔絕了許多細(xì)節(jié)。這些細(xì)節(jié)從學(xué)習(xí)和探究的角度來(lái)說(shuō),其實(shí)是很寶貴的。
對(duì)數(shù)據(jù)結(jié)構(gòu)的理解:Python的數(shù)據(jù)結(jié)構(gòu)封裝的比較完整和成熟,使用的時(shí)候基本上就是隨用隨取,諸如list、map、set的使用,非常方便。所以在刷題(LeetCode)時(shí),語(yǔ)言上首選的都是Python。刷題的時(shí)候確實(shí)很爽,很有助于提高刷題進(jìn)度、快速實(shí)現(xiàn)、理解思路,但是感覺(jué)這種方式還是不夠“硬核”。想要真正檢測(cè)自己的算法Coding水平,可能還是要用C++來(lái)實(shí)現(xiàn)。
出于以上幾個(gè)原因方面,決定對(duì)C++重新學(xué)習(xí),深入思考。
C++從傳統(tǒng)的98已經(jīng)到后來(lái)的11、14、17,直到現(xiàn)在的20,但最常用的可能還是98和11。所以先對(duì)98和11理解,旨在打牢基礎(chǔ),理解原理,而不在于語(yǔ)法糖、新特性、快速實(shí)現(xiàn)等。
這里定兩個(gè)小目標(biāo)。
- 把《STL源碼剖析》一書閱讀一遍,搞清基本的STL底層實(shí)現(xiàn)。
- 使用C++把算法題刷200道。
二、前言
首先來(lái)了解一下《STL源碼剖析》這本書,這里摘錄原書引文的幾句話。
- 為什么要學(xué)STL庫(kù)?
大師們的縝密思維、經(jīng)驗(yàn)結(jié)晶、技術(shù)思路、獨(dú)到風(fēng)格,都原原本本體現(xiàn)在源碼之中。在你仔細(xì)推敲之中,迷惑不解之時(shí),恍然大悟之際,你的經(jīng)驗(yàn)、思維、視野、知識(shí)乃至技術(shù)品味都會(huì)獲得快速的成長(zhǎng)。
天下大事,必作于細(xì)。
參觀飛機(jī)工廠并不能讓你學(xué)到流體力學(xué),也不能讓你學(xué)會(huì)開飛機(jī)。然而你如果會(huì)開飛機(jī)又懂流體力學(xué),參觀飛機(jī)工廠可以帶給你最大的樂(lè)趣和價(jià)值。
- 為什么要讀侯捷老師的書?
- 侯捷老師如何寫這本書?
- 這本書有些什么內(nèi)容
2. 空間配置器 allocator
3. 迭代器 iterators 與 traits 編程技法
4. 序列式容器 sequence container
5. 關(guān)聯(lián)式容器 associated containers
6. 算法 algorithms
7. 仿函數(shù)或函數(shù)對(duì)象 functors or function objects
8. 配接器 adapter
三、STL介紹
STL是標(biāo)準(zhǔn)模板程序庫(kù),它所實(shí)現(xiàn)的,是依據(jù)泛型思維架設(shè)起來(lái)的一個(gè)概念結(jié)構(gòu)。這個(gè)以抽象概念(abstract concepts)為主體而非以實(shí)際類(classes)為主體的結(jié)構(gòu),形成了一個(gè)嚴(yán)謹(jǐn)?shù)臉?biāo)準(zhǔn)接口。在此接口之下,任何組件都有最大的獨(dú)立性,并以迭代器(iterator)膠合起來(lái),以配接器(adapter)互相配接,以仿函數(shù)(functor)動(dòng)態(tài)選擇某種策略(policy 或 strategy)。
(一)STL六大組件
六大組件的關(guān)系如下圖所示。
圖 STL六大組件的交互關(guān)系:container通過(guò)allocator取得數(shù)據(jù)存儲(chǔ)空間,algorithm通過(guò)iterator存取container內(nèi)容,functor協(xié)助algorithm完成不同策略變化,adapter可以修飾或套接functor。(二)SGI STL 文件分布與簡(jiǎn)介
- C++ 標(biāo)準(zhǔn)規(guī)范下的 C 頭文件(無(wú)擴(kuò)展名),如 cstdio、cstdlib、cstring
- C++ 標(biāo)準(zhǔn)程序庫(kù)中不屬于 STL 范疇者,如 stream、string
- STL 標(biāo)準(zhǔn)頭文件(無(wú)擴(kuò)展名),如 vector、deque、list、map、algorithm、functional
- C++ Standard 定案前,HP 所規(guī)范的STL 頭文件,如 vector.h、deque.h、list.h、map.h、algo.h、function.h
- SGI STL 內(nèi)部文件(STL 真正實(shí)現(xiàn)于此),如 stl_vector.h、stl_deque.h、stl_list.h、stl_map.h、stl_algo.h、stl_function.h
總結(jié)
以上是生活随笔為你收集整理的sarscape 将dem文件转化成stl_STL源码剖析 阅读笔记(一)介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 码支付如何对接网站_支付宝当面付门店码如
- 下一篇: 4499元起!OPPO Find X6系