原创 Vector::traverse遍歷

對Vector元素進行遍歷,將遍歷結果交由傳遞的函數使用: template <typename T> void Vector<T>::traverse(void (*visit)(T &)) //利用函數指針機制的遍歷 { fo

原创 List::去重,倒置

無序去重: template <typename T> int List<T>::deduplicate() { //剔除無序列表中的重複節點 if (_size < 2) return 0; //平凡列表自然無重複

原创 GraphMatrix::圖的定義

圖的抽象基類: typedef enum { UNDISCOVERED, DISCOVERED, VISITED } VStatus; //頂點狀態 typedef enum { UNDETERMINED, TREE, CROSS

原创 GraphMatrix::構造、析構、插入、刪除

構造析構: GraphMatrix() { n = e = 0; } //構造 ~GraphMatrix() { //析構 for (int j = 0; j < n; j++) //所有動態創建的

原创 BinTree::定義

二叉樹結點定義: #define BinNodePosi(T) BinNode<T>* //節點位置 #define stature(p) ((p) ? (p)->height : -1) //節點高度(與“空樹高度爲-1”的約定

原创 條款11:在operator=中處理“自我賦值”

**如果賦值操作=左右值相等,即自我賦值,傳統做法: 證同策略:** 爲防止new異常,需要在new之前不刪除原先的引用: swap技術的運用: 當傳遞的是值不是引用時同樣可用swap: 注意:

原创 條款06:若不想使用編譯器自動生成的函數,就該明確拒絕

private聲明copy函數和=賦值,更好的辦法是用一個包含private copy或賦值運算符= 的基類,令用戶類繼承該基類:

原创 條款05:瞭解C++默默編寫並調用哪些函數

編譯器在檢測到有對象創建、賦值或者以copy構造函數的方式創建對象時會自動生成函數:

原创 條款14:在資源管理類中小心coping行爲

以對象管理資源之後,某些資源不允許被複制,這時對象應該被private聲明,爲了資源在最後一次使用之後被釋放應該使用shared_ptr並且給出對應的刪除器: 注意:

原创 條款12:複製對象時勿忘其每一個成分

對象複製操作operator=或copy構造函數,一定要記得複製對象每一個成份,特別是base class的成分: 注意:

原创 解決三星ARM11開發板攝像頭採集程序源碼出現的Bug

市面上比較流行的飛凌OK6410A/飛凌OK6410B或者是友善之臂的arm11開發板亦或是華天正的arm11開發板使用的都是三星公司的32位CPU。 前陣子發現了這些開發板視頻採集方面存在的共同Bug:當用MFC壓縮攝像頭採集的H26

原创 條款13:以對象管理資源

auto_ptr智能指針:其析構函數自動對其所指對象調用delete 若對象auto_ptr不指向某一資源,它會設爲null shared_ptr具有相同功能 但是多個shared_ptr對象能同時指向同一資源 注意:

原创 條款15:在資源管理類中提供對原始資源的訪問

tr1::shared_ptr和tr1::auto_ptr都提供一個get成員函數,返回智能指針內部的原始指針: ) operator*和operator->隱式轉換至底部指針: 注意:

原创 解決三星ARM11開發板圖片採集程序源碼出現的Bug

三星公司提供的圖片採集程序源碼是這個: /***************** Capture Thread *****************/ void capture_thread(void) { int start, ret

原创 條款08:別讓異常逃離析構函數

**在調用析構函數中出現的異常有兩種方法: 一是調用abort強制結束程序:** 二是吞下異常: **更好的辦法是: 針對某一個可能在析構函數中出現異常的部分,爲用戶提供該部分函數的調用放法從而給用戶處理異常的機會:**