C 標準程式庫(學習筆記)二

2021-06-21 09:39:13 字數 1713 閱讀 1754

p48

c++在main()的末尾隱式定義了乙個return 0;

p53standard exceptions

exception

p63pair的比較時,第乙個元素具有較高的優先順序,如果兩個pair的第乙個元素不相等,其比較結果就為整個pair的比較結果

make_pair()使你無需寫出型別就可以生成乙個pair物件,常用於函式引數的傳遞

p66智慧型指標保證,無論在何種情況下,只要自己被摧毀,就一定連帶釋放其所指的資源。

auto_ptr要求乙個物件只能有乙個擁有者,嚴禁一物二主,所以其賦值行為會有些奇怪特性。其賦值和copy建構函式將會將物件的擁有權交出去。

只有auto_ptr可以當另乙個auto_ptr的初值,普通指標是不行的

即  std::auto_ptrp;  p=new int();  

//error    std::auto_ptrp(new int);  

//right

p86build_type  的最小長度

p90template class numeric_limits

p96有四個templates function ,分別定義了!=,>,>=,<=四個比較操作符,他們都是利用操作符==,《完成的,這四個函式定義於

因此只要你的class定義了==,

p98中的定義項

p100

stl(標準模板庫)是c++標準程式庫的核心,它深刻影響了標準程式庫的整體結構,stl是乙個泛型程式庫,提供一系列的軟體解決方案,利用先進、高效的演算法來管理資料。

從程式設計師的角度看,stl是由一些可適應不同需求的群集類別和一些能夠在這些資料群集上運作的演算法構成。stl的所有元件都是由templates構成,所以其元素可以是任意類別。

stl總是只提供效率上比較出色的操作

介面卡(container adapters)

注意:只有隨機訪問迭代器才支援operator<  所以為了寫出適合於任何容器的泛型程式**,應該使用operator !=而不是operator<

iterator

const_iterator

前置遞增式比後置遞增式效率高,因為後者需要乙個額外的臨時物件來儲存原來的位置並返回它

演算法並非容器類別的成員函式,而是一種搭配迭代器使用的全域性函式。這使得所有演算法只需實現乙份就可以對所有容器運作

演算法指示的空間是半開空間,不包括結尾

更易型演算法

p146

for_each演算法針對區間內的每乙個元素,呼叫乙個由使用者指定的函式  for_each(coll.begin(),coll.end(),print);

p151  important

仿函式(functor,function object)是泛型程式設計強大威力和純粹抽象的概念的又乙個例證,你可以說,只要其行為像函式,它就是個函式,因此,如果你定義了乙個物件,行為像函式,那麼它就可以被當做函式來使用。

p161

stl容器元素必須滿足一下三個基本要求:

1.必須可透過copy建構函式進行複製

2.必須可透過assignment操作符完成賦值動作

3.必須可透過析構函式完成銷毀動作

4.對順序容器,元素的default建構函式必須可用

5.對於某些動作,必須定義operator==以執行相等操作

6.在關聯容器中,元素必須定義出排序準則,預設operator被呼叫

stl只支援value語義,不支援reference語義?

《C 標準程式庫》讀書筆記(二)

1,下面這段 會引起異常 因為所有權已經轉移 而通過 by reference 方式傳遞 auto ptr 更是糟糕的 若改為 const auto ptr p new int 則會在編譯時提示錯誤.因此我們可以通過常數型auto ptr來終結所有權轉移,它並不是表示你不能更改auto ptr所擁有...

C 標準程式庫

1.如果要把乙個template中的某個識別符號號指定為一種型別,就算意圖顯而易見,關鍵字typename也不可或缺,因此一般的規則是,除了以typename修飾之外,template內的任何識別符號號都被視為乙個值而非乙個型別.2.類的成員函式可以是個template,但這樣的成員函式既不能是vi...

《C 標準程式庫》讀書筆記

泛型 why泛型 為了讓庫更一般化。比如find,可以將三樣東西都引數化 1 查詢物件的型別 2 該物件在資料結構中的組織方式 3 滿足某某條件地查詢 仿函式p127,294 what仿函式 定義了operator 的物件 why仿函式 1 使泛型演算法更一般化 2 仿函式有自己的獨特狀態 仿函式可...