原创 c++ stl 已排序區間算法 查找第一個和最後一個可能位置equal_range使用方法

使用例子: template<typename T> inline void INSERT_ELEMENTS(T& coll, int first, int last) { for (int i = first; i <= l

原创 c++ stl 已排序區間算法 兩個已排序集合的交集set_intersection使用方法

template<typename T> inline void PRINT_ELEMENTS(const T & coll, const string& optcstr = "") { cout << optcstr; f

原创 列表vector C/C++實現

C/C++實現 template<typename Object> class Vector { private: int Size; int Capacity; Object * objects; public: exp

原创 c++ stl 已排序區間算法 兩個已排序集合的差集set_difference、set_symmetric_difference使用方法

template<typename T> inline void PRINT_ELEMENTS(const T & coll, const string& optcstr = "") { cout << optcstr;

原创 C++底層接口Thread類詳細使用方法

頭文件<thread> 創建thread對象 thread有三個構造函數,分別是默認構造函數,複製構造函數,和帶參數的構造函數. 創建和使用一個thread實例類似如下: void print() { cout << "新線程

原创 C++ unique_lock詳解

頭文件<mutex> 相比於lock_guard,更靈活,但效率上差一點,內存也佔用更多. 可以看到unique_lock也含有第二個參數的構造函數.常規使用和lock_guard沒什麼區別。 std::try_to_lock

原创 C++併發與多線程 condition_variable、wait、notify_one、notify_all使用方法

條件變量condition_variable 假設有兩個線程,一個線程A一個線程B。 線程A:等待一個條件滿足. 線程B:專門往消息隊列中扔消息(數據) condition_variable是一個類,和條件相關的類,等待一個條件完

原创 C++ STL string字符串詳解和使用方法

頭文件<string> … 操作 … string操作的實參 … 構造函數和析構函數 注意: 你不能以一個單字符初始化某字符串,但是可以這樣做: string a('a');//錯誤 string b(1, 'a')

原创 c++ stl 已排序區間算法 兩個已排序集合的總和 merge使用方法

使用例子: template<typename T> inline void INSERT_ELEMENTS(T& coll, int first, int last) { for (int i = first; i <=

原创 c++ stl 已排序區間算法 合併連貫之排序區間inplace_merge使用方法

template<typename T> inline void INSERT_ELEMENTS(T& coll, int first, int last) { for (int i = first; i <= last; +

原创 More Effective C++ 21:通過重載避免隱式類型轉換

考慮以下類: class UPInt { public: UPInt(); UPInt(int value); ... }; const UPInt operator+(const UPInt& lhs, con

原创 More Effective C++ 22:考慮用運算符的賦值形式取代其單獨形式

大多數程序員認爲如果他們能這樣寫代碼: x = x + y; x = x - y; 那他們也能這樣寫: x += y; x -= y; 但是,如果 x 和 y 是用戶定義的類型,就不能確保這樣。 operator+、opera

原创 Effective C++條款20:協助完成返回值優化

一個返回對象的函數很難有較高的效率,因爲傳值返回會導致調用對象內的構造和析構函數,這種調用是不能避免的。問題很簡單:一個函數要麼爲了保證正確的行爲而返回對象要麼就不這麼做。如果它返回了對象,就沒有辦法擺脫被返回的對象。 考慮以下類

原创 More Effective C++ 19:理解臨時對象的來源

C++中真正的臨時對象是看不見的,它們不出現在你的源代碼中。 建立一個沒有命名的非堆對象會產生臨時對象。這種未命名的對象通常在兩種條件下產生: 爲了使函數成功調用而進行隱式類型轉換和函數返回對象時. 首先考慮爲使函數成功調用而建立

原创 More Effective C++ 15:瞭解異常處理的系統開銷

爲了在運行時處理異常,程序要記錄大量的信息。 無論執行到什麼地方,程序都必須能夠識別出如果在此處拋出異常的話,將要被釋放哪一個對象;對於每一個 try 塊,他們都必須跟蹤與其相關的 catch 子句以及這些catch子句能夠捕獲的