原创 STL 源碼剖析:deque 的實現原理

雖然 deque 從表面上來說,它採用連續的空間,並且支持隨機訪問,即其迭代器爲 random_access_iterators 類型。而且相比 vector,它還支持 push_front()。 // // ​ 但是實際上,de

原创 C++模板與泛型編程:模板特例化

文章目錄模板特例化定義函數模板特例化函數重載與模板特例化類模板特例化類模板部分特例化特例化成員而不是類 模板特例化 ​ 編寫單一模板,使之對任何可能的模板實參都是最合適的,都能實例化,這並不總是能辦到。在某些情況下,通用模板的定義

原创 C++模板與泛型編程:可變參數模板

文章目錄可變參數模板sizeof... 運算符編寫可變參數函數模板包擴展理解包擴展轉發參數包 (emplace_back實現) 可變參數模板 ​ 一個可變參數模板就是接受一個可變數目參數的模板函數或模板類。可變數目的參數被稱爲參數

原创 C++模板與泛型編程:模板實參推斷 (類型轉換與模板類型實參、函數模板顯式實參、尾置返回類型與類型轉換、函數指針和實參推斷)

文章目錄模板實參推斷類型轉換與模板類型實參使用相同模板參數類型的函數形參正常類型轉換應用於普通函數實參函數模板顯式實參指定顯式模板實參正常類型轉換應用於顯式指定的實參尾置返回類型與類型轉換進行類型轉換的標準庫模板類函數指針和實參推

原创 C++模板與泛型編程:模板實參推斷與引用,理解std::move,與轉發 (std::forward)

文章目錄模板實參推斷與引用從左值引用函數參數推斷類型從右值引用函數參數推斷類型引用摺疊和右值引用參數編寫接受右值引用參數的模板函數理解 std::movestd::move 是如何定義的std::move 是如何工作的從左值 st

原创 C++模板與泛型編程:模板參數、成員模板、控制實例化(實例化聲明與定義)、效率與靈活性(智能指針刪除器的工作方式)

文章目錄模板參數模板參數與作用域模板聲明使用類的類型成員 (typedef typename T::size_type szt爲什麼要 typename)默認模板實參 (類似 sort 的第三個實參)模板默認實參與類模板成員模版普

原创 劍指 offer 重建二叉樹

題目鏈接:https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/ 思路: 以 前序遍歷序列 {1,2,4,7,3,5,6,8} 和中序遍歷序列 {4,7,2,1,5

原创 C++模板與泛型編程:模板函數

文章目錄定義模板函數模板實例化函數模板模板類型參數非類型模板參數inline 和 constexpr 的函數模板編寫類型無關的代碼模板編譯大多數編譯錯誤在實例化期間報告 定義模板 假設我們希望編寫一個函數來比較兩個值,並指出第一個

原创 C++面向對象程序設計:虛函數、抽象基類、訪問控制與繼承

文章目錄前提虛函數對虛函數的調用可能在運行時才被解析派生類中的虛函數final 和 override 說明符虛函數和默認實參迴避虛函數的機制抽象基類純虛函數含有純虛函數的類是抽象基類派生類構造函數只初始化它的直接基類訪問控制與繼承

原创 C++面向對象程序設計:OOP概述、定義基類與派生類

文章目錄OOP 概述繼承動態綁定定義基類和派生類定義基類成員函數與繼承訪問控制與繼承定義派生類派生類中的虛函數派生類對象及派生類向基類的類型轉換派生類構造函數派生類使用基類的成員繼承與靜態成員派生類的聲明被用作基類的類防止繼承的發

原创 C++重載運算:函數調用運算符

文章目錄函數調用運算符含有狀態的函數對象類lambda 是函數對象表示 lambda 及相應捕獲行爲的類標準庫定義的函數對象在算法中使用標準庫函數對象練習 14.42可調用對象與 function不同類型可能具有相同的調用形式標準

原创 C++拷貝控制:右值引用、移動構造函數、移動賦值運算符

文章目錄對象移動右值引用左值持久,右值短暫變量是左值標準庫 move 函數移動構造函數和移動賦值運算符移動操作、標準庫容器和異常移動賦值運算符移後源對象必須可析構(即移後源對象處於銷燬它是無害的狀態)合成的移動操作移動右值,拷貝左

原创 C++拷貝控制:拷貝控制實例

文章目錄拷貝控制實例Message 類save 與 remove 成員Mes 類的拷貝控制成員Message 的析構函數Message 的拷貝賦值運算符Message 的 swap 函數練習 13.37總結 拷貝控制實例 ​ 雖然

原创 C++拷貝控制:swap操作 (應用於重載賦值運算符,程序優化等)

文章目錄前提swap 操作編寫我們自己的 swap 函數swap 函數應該調用 swap,而不是 std::swap在賦值運算符中使用 swap 前提 ​ 有 HasPtr 類: class HasPtr { public:

原创 C++拷貝控制:拷貝控制與資源管理

文章目錄拷貝控制和資源管理行爲像值的類(如 string)類值拷貝賦值運算符定義行爲像指針的類(如 shared_ptr)引用計數定義一個使用引用計數的類類指針的拷貝成員“篡改”引用計數 拷貝控制和資源管理 ​ 通常,管理類外資源