?? c&c++ young library +
字號:
開始有實現自己的STL的想法始于2003年,當時剛開始深入學習STL,對各個編譯器STL
還不是很了解,大概在2004年年初的時候,在工作中碰到的一件事情促使我開始了這項工作。
當時,因為工作的需要,我需要Borland C++ Builder下調用Visual C++寫的動態鏈接庫,
我在動態鏈接庫的一個接口函數中使用了vector,不用說,大家也可以想到,這個函數無
法在Borland C++ Builder下被調用——兩個編譯器實現的STL完全不同!當時不知所以,后
來在網上查閱了資料,最主要的是閱讀了侯捷先生的《STL源碼剖析》之后,才明白了原因。
當時沒有做太多的考慮,只是想解決STL的移植問題,心想SGI STL移植太麻煩,不如自己
寫一個算了,就算寫不出來,也算是鍛煉了自己的編程能力,復習了一遍數據結構和算法
好了。于是,工作就這樣開始了。
在2005年年中,我完成了用C++實現的一個包含了STL容器和算法以及部分function
object的模板庫,因為只想自己用,所以用自己的性的諧音起了一個namespace——young。
但是,理想是美好的,現實是殘酷的,在開發的過程中,我一直使用GCC,實際使用時才
發現大多數編譯器無法正確編譯!唉!說來也怪自己,在看《STL源碼剖析》時,直接把
移植那一部分給跳了過去……自我感覺程序寫的還算整齊,之后,我把這個庫的源碼在網上
共享,供想學習STL實現的朋友參考。而這個事情隨著我工作的加重,也就被我慢慢的淡
忘了,直到2005年12月……當時我所在的公司是一家從事電力系統產品開發的公司,弱電部
分主要以嵌入式產品為主,我所在的項目是個例外,是一個以PC為上位機,以單片機為下
位機的產品,我主要負責上位機部分。2005年年末的時候,我所負責的部分已快接近尾聲,
有一天,負責下位機的同事和我聊天時表示他準備在新產品中使用DSP,他要我在完成工作
之后幫他實現一個實時操作系統。言者無心,聽者有意,我正想從事一些基礎軟件的開發,
遂開始了學習和預研,在設計的時候,我發現因為自己長期在PC平臺下工作,習慣了大量
使用STL來進行開發,但是在嵌入式系統的開發中就沒有這種待遇了,這對于習慣了使用
STL的我來說可不是一個好消息,“工欲善其事,必先利其器”,我遂決定先開發一個STL的
C實現,再在此基礎上進行開發。在開發新的C庫的過程中,我大量借鑒了原先開發的C++模
板庫的經驗,為了區分,我把原來的模板庫重新更名為MiniSTL,新的C庫稱為youngc。
早在寫MiniSTL的時候,我就感覺到C++ template更像一種構建在C++類型系統上的
shell語言,但是使用模板來進行一些傳統的開發未必合適。例如模板帶來的代碼膨脹問題
就是一個頭疼的事情。在寫MiniSTL的時候,我發現所有的容器類大部分代碼都是相同的,
只是調用的默認構造函數、復制構造函數、賦值操作符、析構函數不同而已;所以在寫完
youngc之后,我又嘗試性的以youngc為kernel,以C++ template為shell,先寫了一個
vector,寫完之后一調試,發現完全可行!于是,趁熱打鐵,不到兩個星期就把STL中的容
器以這種方式一一實現了,而且還在參考了C++ TR1后,實現了unordered_set, unordered_map,
unordered_multiset、unordered_multimap四個新增的容器。
在工作以及完成程序庫的過程中我積累了一些經驗,看著網上不少剛學編程的朋友欲
入門而不得其法,我覺得我應該寫些東西,希望讀過這個系列文章的朋友能少走一些彎路。
有鑒于此,我想以我實現的這個程序庫為例,向剛入門的朋友講解我在實現過程中所學習
和使用的技術,C/C++編程,數據結構、算法以及一部分軟件工程的知識是講述的重點。
說到軟件工程,沒有從事過實際工作的朋友很難理解為什么要學習這門“華而不實”的學科,
其實我也是在完成了一個實際的開發工作后才真正的有一點理解的!尤其是測試的重要性,
我也是在最近才理解!我所在的公司有兩位年過50的專家,他們就告訴我,開發中最難的
是設計和測試,實現是最簡單的。在庫的發布中有我編寫的數千行的交互式的測試程序,
有了它們的幫助,我找出了程序中的很多致命的BUG,在后續的文章中我將詳細的介紹。
源碼我已在OSDN上發布,下載地址為:
http://gforge.osdn.net.cn/frs/?group_id=86
附:下面列出的書包含了我在實現young程序庫所用到的知識,這些書都是我仔細讀過或走
馬觀花翻閱過的。
《C程序設計語言(第二版)》
《C++程序設計語言(特別版)》
《算法導論(第二版)》
《數據結構與STL》
《泛型編程與STL》
《STL源碼剖析》
《深度探索C++對象模型》
《C++ template》(中文版)
《Exceptional C++》(中文版)
《More Exceptional C++》(中文版)
《Exceptional C++ Style》(中文版)
《Effective STL》
《C++編程規范》
《設計模式:可復用面向對象軟件的基礎》
《代碼大全(第二版)》
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -