2011年8月22日 星期一

讀書心得: The C++ Standard Library : a Tutorial and Reference

More about The C++ Standard Library
Effective C++第一條款就寫明「C++是一個語言聯邦。」 這個語言聯邦由四個次語言組成,分別是 C、 物件導向C++、Template C++、以及標準庫 STL。我去年接了大一程設課助教,每週都要上台教 C++,這份苦差事意外挖出不少自己當年學習上的盲點。其中最大的問題就是我對 C++ 的後兩個部分: Template C++以及 STL 不夠熟悉,只好找上這本書來補足這方面的知識。

STL 是一個相當淺明易用的程式庫,這從我以前亂逛 cplusplus.com,糊里糊塗就能隨便抄幾句 STL 來用就可以得證。本書對我的主要幫助不是學會 STL,而是能夠從宏觀的視野來看待整個 STL,了解當初 STL 設計的時候架構上的取捨,引發的優點以及缺點,能讀到這些設計上的觀點我覺得很難能可貴。就好像我以前都覺得 STL algorithm 異常難用,看了書才知道原來 STL algorithms 要搭配 function object 才能發揮威力。各種 Iterator 的錮中差異,也是看了此書後才有全盤了解。

內容上我認為第五章是整本書的核心精華,清楚說明了 STL 三大組件的關係與腳色
(圖片節錄自書上5.1節)

Container 負責管理物件集合,Algorithm 是操作手法,而 Iterator 則扮演此二者間的黏著劑,讓雙方可以透過抽象手法互相作用,不會有過緊的依賴關係,由此可以看出 STL 設計之初軟體架構就相當軟Q。接下來六 ~ 九章是書本的主力內容,分別對Container、Iterator、Algorithm 做專門深入的探討。

第八章 Function Object 我認為是值得一讀的特別章節,因為坦白說 function object 這東西使用上並不直覺 (我一直覺得只有聰明鬼才能想出替 object 加上operator( ) 來當函數呼叫的餿主意 ),但是要靈活地使用STL Algorithm,就一定要搭配 function object 才行。沒有function object,STL Algorithms 就只是彆腳程式庫。第十章之後還有介紹一些C++的其他標準庫,像是字串、I/O、國際化問題等等。

整體來講,這是一本好書,但是有點無聊。本書安排內容的方式是把 STL 各個部分切開來,每部份分配一章,依照主題中規中矩的逐一的細講下去,這樣寫的優點是以後要查閱很方便,想回顧某特定功能時很直接,但是缺點就是拿來當學習書會有點囉嗦,學習之初較易見樹不見林。不過書名就明顯寫了「a Tutorial and Reference」,除了拿來學習還可以當 reference 用,那難免有點這類弊病。

附帶一提這是德國人寫的英文書,所以文句很容易理解,幾乎沒有複雜難解又充滿詩意的句子,蠻適合當作練習閱讀原文書的材料。

相關文章連結
The C++ Standard Library讀書筆記:  Function Object