條款54 讓自己熟悉包括TR1在內的標準程式庫

2021-07-05 12:49:26 字數 2474 閱讀 2270

/*條款54:讓自己熟悉包括tr1在內的標準程式庫*/

//c++standard 98年被標準委員會核准了,03年發布了乙個不很重要的錯誤修正版 08年左右發布了 c++standard2.0 日期不確定的一版叫c++0x 指 200x版c++

//c++0x 覆蓋了某些有趣的語言新特性,但大部分新機能都是以標準程式庫的擴充形式體現,我們知道的某些新的程式庫機能被詳細敘述在tr1的文件內technical report 1

//tr1宣示了乙個新版c++的來臨,不熟悉tr1 機能而卻奢望成為一位高效的c++程式設計師是不可能的,tr1提供的機能幾乎對每一種程式庫和每一種應用程式都帶來利益

/* 這裡是98列入的主要成分

1 stl :vector string map,iterator,algorithms function_objects(less,greater),stack,priority_queue, mem_fun,not1

2 iostream 覆蓋使用者自定緩衝功能,國際化io,以及預先定義好的物件cin,cout,cerr,clog

3 國際化支援,多區域能力,multiple,active locales wchar_t wstring

4 複數模板complex 純數值陣列 valarray

5 異常階層體系 base class exception derived classes logic_error runtime_error 以及更深繼承的各個classes

6 c89 標準程式庫

7 tr1 詳細敘述了14個新元件(也就是程式機能單位) 統統放在std命名空間內 更正確地說是在其巢狀 命名空間tr1內,因此shared_ptr的命名是std::tr1::shared_ptr

8 智慧型指標 shared_ptr(如內建指標,但會記錄有多少個shared_ptrs共同指向同乙個物件,這便是所謂的引用計數,一亙最後 乙個這樣的指標 被 銷毀,這個物件會自動刪除,但如果兩個或多個物件內含shared_ptrs 並形成環狀,這個環形會造成每個物件的引用次數都大於0,即使指向這個環形的所有指標都已被銷毀(也就是這一群物件整體看起來已無法觸及(計數還在,但指標沒了。。),這也是為什麼會有weak_ptr的原因)) weak_ptr(非環形shared_ptr-based資料結構中的環形感生指標,weak_ptr並不參與引用計數的計算,當最後 乙個指向某個物件的shared_ptr被銷毀,縱使還有weak_ptr繼續指向同乙個物件,該物件仍舊會被刪除,這種情況下的weak_ptr會被自動標示無效)

9 tr1::function 此物得以表示任何可呼叫物(函式,函式物件),只要簽名符合目標,

// 假設我們想註冊乙個callback函式 該函式接受乙個int並返回乙個string ,我們可以這樣寫

// void registercallback(std::string func(int));引數裡的函式名也可以省略像下面

// void registercallback(std::string (int));tr1::function 是個template 以其目標簽名為引數

// void registercallback(std::tr1::functionfunc);

// 引數func 接受任何可以呼叫物 ,只要該可呼叫物的簽名與std::string (int)一致

10 tr1::bind 它能夠做stl繫結器bind1st bind2nd 所做的每一件事 ,和前任繫結器不同的是,tr1::bind可以和const ,non-const成員函式協同運作,可以和by-reerence 引數協同運作,

11 hash tables

12 regular experssions 包括正規表示式為基礎的字串查詢和替換,或是從某個匹配字串到另乙個匹配字串的逐一迭代等等

13 tuples(變數組) 這是標準程式庫中的pair template的新一代製品,pair 只能持有兩個物件,tuple可持有任意個數的物件,

14 tr1::array 本質上是個stl化陣列,即乙個支援成員函式如begin end的陣列,不過它的大小固定,並不使用動態記憶體

15 tr1::mem_fun 這個語句構造上與成員函式指標一致的東西,其納入並擴充了98的mem_fun mem_fun_ref的能力

17 隨機數生成工具 它大大超越了rand

18 數學特殊函式 包括laguerre多項式 bessel函式 衣索匹亞橢圓積分。。。

19 c99相容擴充,這是一大堆函式和模板

20 type traits 一組traits classes 用以提供型別的編譯期資訊,給予乙個型別t,tr1的type straits可以指出t是否是個內建型別,是否提供虛析構函式,是否是個空類,可隱匿 轉換為其他型別u嗎。。。也可以上顯現該給定型別的適當齊位,這對定製型記憶體分配器的編寫人員是十分關鍵的資訊

21 tr1::result_of 這是個template 用來推導函式呼叫 的返回型別,

tr1的多數元件奠基於boost

namespace std

*/

條款49 盡量讓自己熟悉C 標準庫

1,標準庫的每一樣東西幾乎都在namespace std中,然而世界上有無可計數的c 程式 依賴那些已經使用多年的 準 標準程式庫,例如宣告於,等檔案中的功能。2,解決方法,設計新的頭檔名,給披上std外衣的各個元件使用。1 將原有的c 標頭檔案中的.h擴充套件拿掉,於是變為。如 cin的型別 ba...

55 讓自己熟悉Boost

boost的兩個原因使其他組織無法匹敵 1 它與c 標準委員會之間有著獨一無二的密切關係,並且對委員會深具影響力。boost由委員會創設,因此boost成員和委員會成員有很大的重疊。boost有個目標 作為乙個 可被加入標準c 之各種功能 的測試場。2 它接納程式庫的過程。以公開進行的同僚複審為基礎...

條款1 4 讓自己習慣C

define aspect ratio 1.653 巨集定義的方式 const double aspect patio 1.653 const常量的方式 define定義的名稱無法追蹤,不易除錯 define比const常量定義會產生更多的目標碼 編譯器處理原始碼之前,預處理器就已經將原始碼中的as...