Time of Update: 2018-12-06
預設情況下swap動作可由標準程式庫提供的swap演算法完成:namespace std{ template<typename T> void swap(T& a, T& b) { T temp(a); a = b; b = temp; }
Time of Update: 2018-12-06
高品質,源碼開放、平台獨立、編譯器獨立的程式庫。 http://boost.org,它和c++標準委員會之間有著獨一無二的密切關係,並對委員會深具影響力。它以公開進行的同僚複審(public peer review)為基礎接納程式庫。boost對付的主題非常繁多,包括:字串與文本處理,容器,函數對象和進階編程,lambda,可以讓我們輕鬆的隨時隨地建立函數對象using namespace boost::lambda;
Time of Update: 2018-12-06
當你使用new,有兩件事情發生。第一,記憶體被分配出來(通過名為operator
Time of Update: 2018-12-06
copy建構函式和copy assignment操作符,我們稱他們為copying函數。這些“編譯器產生版”的行為:將被烤對象的所有成員變數都做一份拷貝。聲明自己的copying函數,void logCall(const std::string funcName); class Customer { public: Customer(const Customer& rhs); Customer& operator=(
Time of Update: 2018-12-06
class B { public: void mf(); ... }; class D : public B {...};D x;如果一下行為:B* pB = &x;pB->mf();異於以下行為:D* pD = &x;pD->mf();你可能相當驚訝。兩者的行為確實應該相同,但是如果mf是個non-virtual函數而D定義有自己的mf版本:class D : public B { public:
Time of Update: 2018-12-06
只要定義一個變數,而其類型帶有一個建構函式或解構函式, 那麼當程式的控制流程到達這個變數定義時,變承受構造成本;當變數離開範圍時,便承受析構成本。 //這個函數過早定義變數“encrypted” std::string encryptPassword(const std::string& password) { using namespace std; string encrypted; if(password.length() <
Time of Update: 2018-12-06
c++Standard——定義c++語言及其標準程式庫的規範,TR1詳細敘述了14個新組件,都放在std命名空間內c++98列入的c++標準程式庫有哪些主要成分:stl,覆蓋容器、迭代器、演算法、函數對象、各種容器適配器和函數對象適配器。Iostreams,覆蓋使用者自定緩衝功能,國際化I/o,以及預先定義的對象cin,cout,cerr和clog國際化支援,包括多地區能力。像wchar_t和wstring(由wchar_ts組成的strings)都對促進Unicode有所幫組。數值處理,包括複
Time of Update: 2018-12-06
資源是,一旦用了,將來必須還給系統,除了記憶體常見的還有檔案描述符(file description)、互斥鎖、圖形介面中的筆刷、資料庫連接以及網路socket。考慮到異常、函數內多重回傳路徑、程式維護員軟體改動卻沒有理解隨之而來的衝擊,發現資源管理的特殊手段還不很充分夠用。假設一個各式各樣的投資類型繼承的一個root class Investment:class Investment {...};假設通過一個工廠函數供應我們某特定的Investment對象:Investment*
Time of Update: 2018-12-06
假設建立一個class來儲存一個指標指向一塊兒動態分配的位元影像(bitmap)class Bitmap{...}; class Widget { public: protected: private: Bitmap* pb; };這個operator=實現代碼錶面看上來合理, 但自我賦值出現時並不安全,也不具備異常安全性。Widget& Widget::operator=(const Widget&
Time of Update: 2018-12-06
並非所有的資源都是heap-based,對那種資源來講,auto_ptr和shared_ptr這樣的智能指標往往不適合作為資源掌管著。你可能需要自己建立自己的資源管理類。例如,處理類型為Mutex的互斥器對象,有lock和unlock兩函數可用。void lock(Mutex* pm); void unlock(Mutex* pm); class Lock{ public: explicit Lock(Mutex* pm)
Time of Update: 2018-12-06
假設你整在寫一個視頻遊戲軟體,由於不同的人物可能以不同的方式計算它們的健康指數,將healthValue聲明為virtual似乎再明白不過的做法:class GameCharacter { public: virtual int healthValue()const; ... };由於這個設計如此明顯,你可能沒有認真考慮其他替代方案。為了協助你跳脫物件導向設計路上的常軌,讓我們考慮其他一些解法:藉由Non-virtual interface手法實現Template
Time of Update: 2018-12-06
資源管理類避免直接處理資源,但是許多APIs直接涉及資源,所以應該提供返回原始資源的函數。tr1::shared_ptr和auto_ptr都提供一個get成員函數,用來執行顯式轉換,返回智能指標內部的原始指標(的複件)。std::tr1::shared_ptr<Investment> pInv(createInvestment());int daysHeld(const Investment* pi); //返回投資的天數int days = daysHeld(pInv); /
Time of Update: 2018-12-06
所謂智能指標是“行為像指標”的對象,並提供指標沒有的機能。真實指標做的很好的一件事是,支援隱式轉換。Derived class指標可以隱式轉換為base class指標。指向non-const的對象的指標可以轉換為指向const對象。下面是發生於三層繼承體系的一些轉換:class Top{...}; class Middle: public Top{...}; class Bottom: public Middle{...}; Top* pt1 = new
Time of Update: 2018-12-06
////////////////////////////////////////////////////////Example 1 ////////////////////////////////////////////////////// #include <iostream.h> class CFunction { public: CFunction() { data = new char[64]; }; ~CFunction() { delete [] data; };
Time of Update: 2018-12-06
effective C++ 條款 2:盡量用const和inline而不用#define盡量用編譯器而不用預先處理#define ASPECT_RATIO 1.653 它會被預先處理程式去掉,於是ASPECT_RATIO不會加入到符號列表中定義指標常量時會有點不同 要寫兩次const:const char * const authorName = "Scott Meyers";最好用const std::string authorName("Scott
Time of Update: 2018-12-06
先是父類各成員的初始化, 各成員的預設建構函式, 再調用父類的建構函式,然後是各成員的初始化, 各成員的預設建構函式,然後是自己的建構函式。class a{public: a() { cout << "construct a" << endl; }};class combinebase{public: combinebase() { cout << "construct combinebase"
Time of Update: 2018-12-06
A*B mod C的快速計算方法 2009-07-28 17:11:18| 分類: 經典演算法 | 標籤: |字型大小大中小 訂閱方法一: 大家都能想到,計算A*B的值,然後在計算A*B mod
Time of Update: 2018-12-06
模素數p的原根g的優美體現在每個模p的非零數以g的冪次出現。所以,對任何數1 <= a < p,我們可選擇冪 g,g^2,g^2,```````,g^(p-2),g^(p-1)中恰好一個與a模p同餘。相應的指數被稱為以g為底的a模p的指標。假設p與g已給定,則記指標為I(a)。以下以2模13的所有冪的形式:I 1 2 3 4 5 6 7 8 9 10 11 122^I(mod 13) 2 4 8 3
Time of Update: 2018-12-06
在VC++4.1以前的版本中,使用的庫稱為運行庫(run-time library),標頭檔名都是“*.h”。從VC++4.2版本開始使用標準C++庫(standard C++ library),標準C++庫是符合ANSI標準的,它使你的程式可以在不同的編譯系統和平台間移植。新的標頭檔名不再有“.h”副檔名,不過標準C++庫仍然保留了18個帶有“.h”副檔名的C標頭檔。
Time of Update: 2018-12-06
很多人甚至市面上的一些書籍,都使用了void main( ) ,其實這是錯誤的。C/C++ 中從來沒有定義過void main( ) 。C++ 之父 Bjarne Stroustrup 在他的首頁上的 FAQ 中明確地寫著 The definition void main( ) { /* ... */ } is not and never has been C++, nor has it even been C. ( void main( ) 從來就不存在於 C++ 或者 C