Time of Update: 2018-12-04
FAQ 2.15 在C++中模板是最強大的代碼複用機制.模板最普通的用法是容器,容器是用來建立包含其他對象的對象。有許多不同的容器模板,包括連結的列表(list),向量(vectors)也就是(arrays),sets,和maps。容器模板讓程式員在使用前人總結的精鍊的資料結構中獲益。例如二進位樹,總是保持平衡,雜湊表(hash tables),跳躍表(skip lists),伸展樹(splay
Time of Update: 2018-12-04
基本概念 鉤子(Hook),是Windows訊息處理機制的一個平台,應用程式可以在上面設定子程以監視指定視窗的某種訊息,而且所監視的視窗可以是其他進程所建立的。當訊息到達後,在目標視窗處理函數之前處理它。鉤子機制允許應用程式截獲處理window訊息或特定事件。 鉤子實際上是一個處理訊息的程式段,通過系統調用,把它掛入系統。每當特定的訊息發出,在沒有到達目的視窗前,鉤子程式就先捕獲該訊息,亦即鉤子函數先得到控
Time of Update: 2018-12-04
Method 1:使用C的atoi()和atof()。先利用c_str()轉成C string,再用atoi()與atof()。#include <iostream>#include <string>#include <cstdlib>using namespace std; int main() { string s = "123"; double n = atof(s.c_str()); //int n = atoi(s.c_str());
Time of Update: 2018-12-04
開放-封閉原則是指軟體實體(類,模組,函數等等)應該可以擴充,但是不可以修改,對於擴充是開放的(Open for extension),對於更改是封閉的(Closed for modification)無論模組是多麼的"封閉",都會存在一些無法對之封閉的變化,既然不可能完全封閉,設計人員必須對於他設計的模組應該對那種變化封閉作出選擇。他必須先猜測出最有可能發生的變化種類,然後構造抽象來隔離那些變化,一般等到變化發生時立採取行動面對需求,對程式的改動是通過增加新代碼進行的,而不是更改現有的代碼。
Time of Update: 2018-12-04
假設想要對一個二叉尋找樹執行一系列的尋找操作。為了使整個尋找時間更小,被查頻率高的那些條目就應當經常處於靠近樹根的位置。於是想到設計一個簡單方法,在每次尋找之後對樹進行重構,把被尋找的條目搬移到離樹根近一些的地方。splay tree應運而生。splay
Time of Update: 2018-12-04
方法一 std::stringstream stream; string result="10000C"; int n = 0; stream << result; stream >>hex>> n;方法二使用boost中的lexical_cast類. string str = "10000C"; int nIndex = lexical_cast <int>(str); 方法三 #include
Time of Update: 2018-12-04
Skip List 上尋找的基本思想是先從最高的 Level 層上尋找,找到 key 所在的範圍後,再從較低的層次繼續重複尋找操作,直到 Level 1。嚴格意義上說,跳躍表不屬於尋找樹,但它能以極其簡單的實現提供二叉尋找樹的部分功能:插入和尋找。跳躍表操作的時間複雜度期望為O(log
Time of Update: 2018-12-04
文章目錄 1. CArray<> VS ::std::vector<> ?2. ::std::vector<> 在哪裡?3. ::std::vector<> 中的類型定義4. ::std::vector<> 的構造5. 訪問 vector<> 中的元素6. ::std::vector<> 的儲存管理7. 添加元素到 vector 中8. 刪除元素9. 作為序列訪問 vector
Time of Update: 2018-12-04
策略模式(Strategy) :它定義了演算法家族,分別封裝起來,讓他們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。 結構圖: //Strategy抽象類別,定義所有支援的演算法的公用介面。class Strategy{public: Strategy(){}; //演算法方法 virtual void AlgorithmInterface(){};};//封裝了具體演算法或行為,繼承於Strategy//具體演算法Aclass ConcreteStrategyA :
Time of Update: 2018-12-04
一、重載規則I.可以重載的操作符+- */ %^& |~ !=>< +=-=*=/= %=^=&=|=>><< >>=<<===!=>= <=&&||++-- ->*,->[]() operator new operator new[]operator delete operator delete []II.不能重載的操作符::..*?
Time of Update: 2018-12-04
CL.exe的全部命令開關 /C:在預先處理輸出中保留備註陳述式 /c:只編譯,不串連,相當於在"Build"菜單下選擇了"Compile" /D:定義常量和宏,與來源程式裡的#define 有相同效果 /E:預先處理C、C++源檔案,將源檔案中所有的先行編譯指令及宏展開,將注釋去掉,然後將前置處理器的輸出拷貝至標準輸出裝置輸出,並且在每個檔案的開頭和末尾加入#line /EH:指定編譯器用何種異常處理模型 /EP:同/E,只是去掉了#
Time of Update: 2018-12-04
FAQ 5.11 多態和動態綁定(polymorphism and dynamic binding)C++的這種特點使新的代碼多少可以替代一些舊的代碼:物件導向程式強大的真正原因不在於繼承;而在於它可以將繼承類對象當作基類對象來對待,支援這個特性的機制是多態和動態綁定(polymorphism and dynamic
Time of Update: 2018-12-04
虛擬記憶體(Virtual Memory)是Windows管理所有可用記憶體的方式。對於32位Windows系統,每個進程所用到的虛擬記憶體地址從0到2^32-1,總容量4GB,其中2GB是與作業系統以及其他所有進程所共用,另外2GB指派給進程獨佔(這就是常說的32位Windows中一個進程最多能用2G記憶體的由來)。4GB虛擬位址空間(Virtual Address Space,VAS)中,2GB的進程獨佔VAS是進程隔離的,換句話說,每個進程都可以從RAM或者硬碟上映射到屬於自己的2GB V
Time of Update: 2018-12-04
作為一個軟體開發人員,你會建立,開啟,操作核心對象。系統會建立和操作多種類型的核心對象,例如access token 對象, event 對象,file對象,file-mapping對象,I/O完成連接埠對象,job對象,mailslot對象,mutex對象,pipe對象,process對象,semaphore對象,thread對象,waitable time對象,和threa pool worker
Time of Update: 2018-12-04
源碼下載 介紹 最近正試著從其他程式的listview控制項中擷取資訊,因為需要傳遞一個指標以便存放取得的字串,但Windows使用的是虛擬記憶體,指標是不允許跨進程訪問的。 Windows是這樣通過虛擬記憶體來管理分配給所有應用程式的記憶體的:它讓程式認為自己擁有2GB的記憶體空間可用,它也通過保護來避免程式互相佔用記憶體.這樣當一個程式有問題時,不會影響到其他程式。 寫了一些代碼之後,我認識到我的指標是不允許的,所以無法工作。通過幾個小時在MSDN上
Time of Update: 2018-12-04
FAQ 2.21 (1)總的觀點:努力避免這種狀況,(2)如果無法避免,使用auto_ptr. 盡量避免包含在堆上分配的對象的指標.例如,分析一下一個car類包含一個engine的情行。這兒有兩個選擇:教好的方式是engined對象直接嵌入到car對象內,不好的方式是car對象包含一個指向engine對象的指標,car從堆分配engine對象,下面是例子:#include <iostream>using namespace std;class
Time of Update: 2018-12-04
SHGetFileInfo函數WINSHELLAPI DWORD WINAPI SHGetFileInfo( LPCTSTR pszPath, DWORD dwFileAttributes, SHFILEINFO FAR *psfi, UINT cbFileInfo, UINT uFlags);pszPath 參數:指定的檔案名稱。 當uFlags的取值中不包含 SHGFI_PIDL時,可直接指定; 當uFlags的取值中包含
Time of Update: 2018-12-04
[源碼下載] 介紹 在Code Project網站有許多關於password spy的文章,但是這些都是基於Windows Hooks的,還有沒有其他方式能實現這種效果呢?是的,有,不過,先讓我們簡要的回顧一下。要想讀控制項的內容,一般需要給它發送WM_GETTEXT
Time of Update: 2018-12-04
一、基本內容: C/C++語言中的函數可以遞迴調用,即:可以直接(簡單遞迴)或間接(間接遞迴)地自己調自己。 要點: 1、C/C++語言函數可以遞迴調用。 2、可以通過直接或間接兩種方式調用。目前只討論直接遞迴調用。 二、遞迴條件 採用遞迴方法來解決問題,必須符合以下三個條件: 1、可以把要解決的問題轉化為一個新問題,而這個新的問題的解決方案仍與原來的解決方案相同,只是所處理的對象有規律地遞增或遞減。
Time of Update: 2018-12-04
無法解析的外部符號“symbol”是指該符號在函數“function”中被引用,在function中找到了未定義的外部符號 (symbol)。若要解決此錯誤,請提供符號定義或移除引用它的代碼。 1.在 Visual C++ .NET 2003 中,如果使用了 /clr 而未將 CRT 連結到可執行檔,將產生此錯誤。任何由編譯器在未使用 /clr:initialAppDomain 時產生的對象代碼都包含對 _check_commonlanguageruntime_version