原创 C++ STL源碼分析——一個萬用的 hash function

【侯捷-SL體系結構內核分析-一個萬用的 hash function】 我們知道,unordered_set / unordered_multiset / unordered_map / unordered_multimap 內部

原创 【Effective C++】不要讓異常逃離析構函數

首先先拋出結論: 析構函數絕對不要拋出異常。如果在一個析構函數中某個函數可能調用失敗,拋出異常,這個析構函數應該捕捉這個異常,然後“吞下”他們,或者結束程序。 如果客戶端需要對某個操作函數運行期間拋出的異常做出反應,那麼這個 c

原创 字符串全排列與組合算法以及八皇后問題

【劍指offer-題38】 字符串排列 題目 輸入一個字符串,輸出該字符串的全排列。 思路 數學中的排列思想。算法步驟如下: 求出所有可能出現在第一個位置的字符。將首字符依次與後面的字符交換,即可達到此目的。 確定完第一個位置的

原创 C++ STL源碼分析——適配器之迭代器適配器

【侯捷-SL體系結構內核分析-適配器】 reverse_iterator inserter_iterator reverse_iterator 容器除了擁有返回正向迭代器的函數 begin 和 end 之外,還有兩個類似的成員函

原创 【Effective C++】不要在構造函數和析構函數中調用 virtual 函數

首先結論如標題所示。 如果你有一個類的繼承體系,用來模擬股票交易市場的買進賣出,並且每一筆交易都需要進行記錄,那麼可能會有如下的類繼承關係: class Transaction { public: Transaction()

原创 C++ STL源碼分析——算法(一)

【侯捷-SL體系結構內核分析-算法】 目錄: accumulate for_each replace, replace_if, replace_copy accumulate 源碼 accumulate 的源碼如下。 temp

原创 【C++內存管理】內存管理實例 (二) —— Embeded pointer

在上一篇的內存管理簡單實例中,我們用一個 next 指針將分配的一整塊內存中的每個對象大小的內存塊鏈接成鏈表,客戶端需要動態分配對象內存時,直接從鏈表上獲取,減少了不必要的 cookie 內存消耗。但是缺點也很明顯,就是增加了每個

原创 C++ STL源碼分析——適配器之仿函數適配器 bind2nd 以及 bind

【侯捷-SL體系結構內核分析-適配器】 bind2nd 爲二元函數適配器,指定二元函數的第二個參數,將二元函數轉變爲一元函數。比如下面這個例子: int main() { vector<int> vec = vector<int

原创 【C++內存管理】loki::allocator 源碼分析

loki 是書籍 《Modern C++ Design》配套發行的一個 C++ 代碼庫,裏面對模板的使用發揮到了極致,對設計模式進行了代碼實現。這裏是 loki 庫的源碼。 ps. 有空是不是應該把裏面的設計模式的代碼學習學習,

原创 【C++內存管理】內存管理實例 (一 ) —— 簡單形式

內存管理無外乎希望提高兩方面性能: 提高運行效率。可以通過減少 malloc 函數調用的次數來提高運行效率。 提高空間利用率。減少浪費。每次通過 new 分配的內存塊上下兩個部分都帶有 cookie,記錄着這塊內存的大小等相關信

原创 【Effevtive C++】儘量以 const enum inline 替換 #define

首先先拋出結論: 以 const 或者 enum 替換 #define 常量定義 以 inline 代替某些看起來像是函數的宏定義 以 const 或者 enum 替換 #define 常量定義 在 C 代碼中,我們可能會用

原创 【Effective C++】將文件之間的編譯關係降到最低

C++ 的編譯依賴關係 如果你對 C++ 的某個實現文件做了修改,你可能會發現,所有與這個類有關的其他項目文件都需要重新編譯。這主要歸咎於 C++ 並沒有把 “將接口與實現分離” 這件事情做得很好。比如說像下面這樣: #incl

原创 【Effective C++】對象之間的複合(composition)關係 —— has a 以及 is-implemented-in-terms-of

複合關係 當某種類型的對象內含其他種類型的對象時,它們之間便是這種複合關係。比如: class Address { //... }; class PhoneNumber { //... }; class Person { pub

原创 【C++內存管理】G2.9 std::alloc 源碼分析

在 上一篇 中,對 std::alloc 的運行時狀態進行了分析,這篇再結合上一篇,深入代碼分析。 常量定義 enum { __ALIGN = 8 }; // block 的間隔 e

原创 【Effective C++】避免返回 handles 指向對象內部成分

首先拋出結論: 不要返回對象私有成員的 handles ,handles 指引用,指針和迭代器。這樣可以增強類的封裝性,避免可能出現的 const 成員函數不 const (即外部仍然可以通過 const 成員函數修改對象內部私