《Effective STL中文版》譯序

來源:互聯網
上載者:User

《Effective STL中文版譯序

 

    就像本書的前兩本姊妹作(Effective C++、More EffectiveC++)一樣,本書的側重點仍然在於提升讀者的經驗,只不過這次將焦點瞄準了C++標準庫,而且是其中最有意思的一部分——STL。

    C++是一門易學難用的程式設計語言,從學會使用C++到用好C++需要經過不斷的實踐。Scott Meyers
的這三本姊妹作分別從各個不同的角度來協助你縮短這個過程。C++語言經過了近二十年的發展,已漸趨完善。儘管如此,在使用C++語言的時候,仍然有許多陷阱,有的陷阱非常明顯,一經點撥就可以明白;而有的陷阱則不那麼直截了當,需要仔細地分析才能揭開那層神秘的面紗。

    本書是針對STL
的經驗總結,書中列出了50 個條款,絕大多數條款都解釋了在使用STL時應該注意的某一個方面的問題,並且詳盡地分析了問題的來源、解決方案的優劣。這是作者在教學和實踐過程中總結出來的經驗,其中的內容值得我們學習和思考。

    STL 的源碼規模並不大,但是它蘊含的思想非常深刻。在C++標準化的過程中,STL
也被定格和統一。對於每一個STL 實現,我們所看到的被分為兩部分:一是STL
的介面,這是應用程式賴以打交道的基礎,也是我們所熟知的STL;二是STL
的實現,特別是一些內部的機理,有的機理是C++標準所規定的,但是有的卻是實現者自主選擇的。在軟體設計領域中有一條普遍適用的規則是“介面與實現分離”,但是對於STL,你不能簡單地使用這條規則。雖然你寫出來的程式碼只跟STL
的介面打交道,但是用好STL 則需要建立在充分瞭解STL
實現的基礎之上。你不僅需要瞭解對所有STL 實現都通用的知識,也要瞭解針對你所使用的STL
實現的特殊知識。那麼,你該如何來把握介面與實現之間的關係呢?本書講述了許多既涉及介面也關係到具體實現的STL
用法,通過對這些用法的講解,讀者可以更加清楚地瞭解應該如何來看待這些與實現相關的知識。

    這兩年來,有關STL
的書籍越來越多,而且許多C++書籍也開始更加關注於STL
這一部分內容。對於讀者來說,這無疑是一件好事,因為STL
難學的問題終於解決了。我們可以看到,像vector 和string
等常用的STL 組件幾乎出現在任何一個C++程式中。但是,隨之而來的STL難用的問題卻暴露出來了,程式員要想真正發揮STL
的強大優勢並不容易。在現有的STL 書籍中,像本書這樣指導讀者用好STL
的書籍並不多見。

    本書沿襲了作者一貫的寫作風格,以條款的形式將各種使用STL
的經驗組織在一起,書中主要包括以下內容:

    如何選擇容器的類型。STL
中容器的類型並不多,但是不同的容器有不同的特點,所以選擇恰當的容器類型往往是解決問題的起點。本書中還特別介紹了與vector
和string兩種容器有關的一些注意事項。

    涉及關聯容器有更多的陷阱,一不留神就可能陷入其中。作者專門指出了關聯容器中一些並不直觀的要點,還介紹了一種非標準的關聯容器——散列容器。

   迭代器是STL
中指標的泛化形式,也是程式員訪問容器的重要途徑。本書討論了與const_iterator
和reverse_iterator 有關的一些問題。以我個人之見,本書這部分內容略顯單薄,畢竟迭代器在STL
中是一個非常關鍵的組件。

     STL
演算法是體現STL 功能的地方,一個簡單的演算法調用或許完成了一件極為複雜的事情,但是要用好STL
中眾多的演算法並不容易,本書給出了一些重要的啟示。

    函數對象是STL
中用到的關鍵武器之一,它使得STL 中每一個演算法都具有極強的擴充性,本書也特別討論了涉及函數和函數對象的一些要點。

    其他方方面面,包括在演算法和同名成員函數之間如何進行區別、如何考慮程式的效率、如何保持程式的可讀性、如何解讀調試資訊、關於移植性問題的考慮,等等。

    本書並沒有面面俱到地介紹所有要注意的事項,而只是挑選了一些有代表性的,也是最有普遍適用性的問題和例子作為講解的內容。有些問題並沒有完美的解決方案,但是,作者已經把這個問題為你分析透了,所以最終的解決途徑還要取決於作為實踐者的你。

    本書的翻譯工作是我和陳銘、鄒開紅合作完成的,其中鄒開紅完成了前25
條的初譯工作,陳銘完成了後25 條的初譯工作,最後我完成了所有內容的終稿工作,同時我也按照原作者給出的勘誤作了修訂。錯誤之處在所難免,請讀者諒解。

    對於每一個期望將STL
用得更好的人,這本書值得一讀。

潘愛民


本文節選自《Effective STL中文版》一書

潘愛民 陳銘 鄒開紅

電子工業出版社出版


 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.