初學C 之通用工具(一)

2021-06-21 12:56:14 字數 1611 閱讀 4397

1.大部分通用工具都定義在標準標頭檔案

.2.pair是儲存鍵值對的主要結構體。

用make_pair()生成pair型別,例如 std::make_pair(43,"ss"); 等同於std::pair(43,"ss");在map和multimap中該函式體現的非常好。

3.智慧型指標auto_ptr在memory中宣告:防止記憶體洩露,比如在delete之前return或則在delete之前出現異常。建立乙個智慧型指標:std::auto_ptrptr(new classa);

智慧型指標和物件時一一對應的,如果乙個指標出現轉移的現象,那麼對應的物件馬上會被**。但是當程式設計師在初始化2個智慧型指標的時候用的相同的乙個物件,那麼這個2個智慧型指標將會指向同乙個物件,程式設計師應該避免改問題。

4.auto_ptr在函式作為引數呼叫或者被函式的返回值返回時會更改所有權,我們可以用const修飾符阻止此種情況。const t* p和t* const p 乙個是指向常數的指標,後面是常數指標,指標自己不會變。我們最好不要用智慧型指標作為引數出入函式也不要把它作為返回值返回。

總結:為了指標的的洩露使用了智慧型指標,智慧型指標當做引數或者返回值的時候會轉移所有權,為了阻止此種事情使用了const型別的智慧型指標,如果函式呼叫的時候使用的是非const智慧型指標,在傳遞引數時候使用的是智慧型指標那麼在編譯時會出錯,只有在函式引數顯示是傳遞的是智慧型指標的時候呼叫智慧型指標才不會出錯。在容器中呼叫const型別的智慧型指標作為引數新增到容器時,猶豫智慧型指標的設計將會出現編譯出錯【其他型別可以用常引用型別傳入到容器中,在容器中通過複製的方式實現】。

5.只有類被構造成功後才能有析構函式一說。

6.智慧型指標注意事項:1)乙個智慧型指標不能指向另乙個智慧型指標所擁有的物件(2個智慧型指標在初始化時使用同乙個物件)2)不存在array智慧型指標,因為智慧型指標通過delete釋放所擁有物件,不是delete,對於資料群標準c++提供了多種容器進行管理。3)智慧型指標非引用型計數指標,引用型指標表示乙個或多個指標指向同一物件,當最後乙個指向該物件的指標銷毀時才銷毀該物件。4)智慧型指標不滿足stl標準容器,因為在拷貝和賦值的時候會交出原來智慧型指標的擁有權,並不是拷貝給新的智慧型指標。所以不要把智慧型指標作為容器的元素。

7.auto_ptr(t* p)這個p指向的物件必須是new出來的,因為在智慧型指標中會預設呼叫該物件的delete操作。智慧型指標的拷貝函式和平常的拷貝函式不一樣,他是哪原來的物件轉移到現在的智慧型指標,原來的智慧型指標出現null,平常的拷貝函式是把原來的值複製乙份出去。在智慧型指標被提取值前請先呼叫get()方法判斷返回值是否為null

8.numeric_limits<>指定了數值型別的極值。標頭檔案在中.

9.演算法程式庫中的3個輔助函式:選擇最大值max,選擇最小值min,交換2個值swap

10.輔助性「比較操作符」 != ,>, <= ,>=四個比較操作符,在中宣告,在std::rel_ops中定義。

11.c語言的函式庫:和對於c語言中的和,其中這些定義了一些新的常熟,巨集。型別和函式。c++中最好不要用null,最好用0取代null

12.exit()和abort():第乙個會銷毀所有static物件和緩衝區,關閉io通道,關閉程式。之前會呼叫atexit().abort()會立即終止,不清理任何工作。這個2個函式指向都不會銷毀區域性變數,我們應該在異常機制或者正常返回機制中運用一些技術來呼叫區域性變數的析構函式。

c 標準庫實戰之通用工具Pair

pair與tuple都是標準庫提供的通用工具,主要用來組合兩個或者多個值。pair可以由引入,定義在bits stl pair.h中 brief struct holding two objects of arbitrary type.tparam t1 type of first object.t...

STL學習筆記之通用工具

class pair 可以將兩個值視為乙個單元。c 標準程式庫中多處使用了這個 class 容器類別 map和 multimap 就是使用該類來管理其鍵值 實值的承兌元素的。任何函式需要兩個值,也需要 pair pair定義於 中,其被定義為乙個 struct 而不是乙個類,故所有成員都為 publ...

4 通用工具

std make pair 42,a 可代替std pair 42,a std auto ptrptr1 new classa ok std auto ptrptr2 new classa error,不允許賦值初始化 std auto ptrptr3 ptr1 ok,同時擁有權轉移 1 設計動機 ...