我找了半天的windows下的markdown編輯器,最後發現vs code就是最好的萬能編輯器!其他win編輯器的短板:公式都能打。
Boost是C++的準標準庫,極大豐富了C++的功能,其中有一些部分會在以後納入C++標準庫,學了有好處。
之前用Qt5作爲項目框架,比較了下qt5和boost,發現qt5某種意義上也是一個“boost”,提供了C++很多擴展功能,所以這裏也放進來比較一下。
第1章 Boost程序庫總論
無評論
第2章 時間與日期
看看就好,看評論是不怎麼使用。C++11提供了std::chrono作爲時間庫。Qt5提供了更好用的日期api。
第3章 內存管理
- 智能指針已經放入標準庫,比如std::unique_ptr,std::shared_ptr,std::weak_ptr。直接使用標準庫智能指針就好。
- boost內存池聽說很多項目也在用,api用起來相對簡單。其中議論較多的是pool.order_malloc的連續內存分配效率,有一些評論反映這個api分配內存效率不行,需要換成一次性分配大塊內存,可以保留一定的分配冗餘:boost::pool<> m_pool(CHUNK_SIZE)。此外內存池的分配溢出需要單獨考慮。
第4章 實用工具
- noncopyable類禁止拷貝,將拷貝函數放到private也能實現同樣的功能。
- auto關鍵字已經加入標準庫,模板推導等也已經加入標準庫,直接使用標準庫即可。
- boost的swap,assign沒有什麼大用。
- 剩下的內容對於非高級項目,不是特別有用。
第5章 字符串與文本處理
- boost提供了豐富的字符串處理api,可直接使用到std::string。Qt5提供了更加豐富的字符串處理api,而且直接就是任意文字編碼,更好用,但是隻能用在QString上。
第6章 正確性測試
無評論,其他測試工具庫有很多。
第7章 容器與數據結構
- std::array,哈希/散列容器std::unordered_set, std::unordered_map均已加入標準庫。Qt也做了同樣的容器。
- std::tuple三元數據,已經加入標準庫。
- 其他類型的容器我認爲不如自己造輪子或者用專業的第三方庫。
第8章 算法
有價值的內容不多。
第9章 數學與數字
- 爲何不用更專業的數學庫?比如Eigen,無需編譯即可用,是我的主要項目庫;CGAL;Armadillo;GSL。
- 隨機數api已經加入標準庫,滿足各種數學概率分佈的隨機數api都有。
第10章 操作系統相關
- 對於系統操作能夠跨平臺用統一的代碼實現,值得了解。此外Qt5也能夠跨平臺實現操作系統相關操作,比如任意操作系統下,遍歷目錄就一句代碼。
第11章 函數與回調
- std::function,std::bind,已經加入標準庫。
- signals2線程安全,不用signal庫;主要用於實現信號槽建立,功能解耦合。signal2觸發是同步的,不能異步。signal2尚未加入標準庫。Qt5的信號槽功能更加好用,線程安全而且可以異步。
第12章 併發編程
- 線程庫已經加入標準庫,直接使用。
- qt5也實現了多線程庫,並且信號槽與線程庫無縫對接,異步執行任務的線程結束後回調主線程的函數這一功能非常適合GUI編程。
- asio尚未加入標準庫,用於併發編程,可以同時使用協程和多線程,包裝了socket api。可以用於構建網絡項目,相對好用,評價較高。asio有獨立於boost的項目。
第13章 編程語言支持
無評論
第14章 其他Boost組件
- 正則表達式,需要編譯,qt5也有。
- 圖像庫,不如搞個opencv。如果僅僅是讀取圖像,qt5直接使用qimage類即可。
- graph,數學上的圖論數據結構,據說有工業級強度很好用。
- range,現在C++11可以直接使用新的for語句 for(auto &it:container) {…}
- 匿名函數已經加入標準庫。
- 模板元,常人用不到,一些模板編程功能已經加入標準庫。
- serialization序列化,和protobuf一樣的功能,優點是能夠序列化stl容器。實用性還可以。
結束語
工具是拿來用的,哪個好用用哪個。
注重問題、解決方法和業務。
用好的開發工具,純命令行並不好。
不考慮很高的效率,qt5可以取代boost很多功能。