C primer閱讀之關聯容器和動態記憶體

2021-10-24 21:09:22 字數 1899 閱讀 1063

第11章

1. 對map,關鍵字是const,不可改變。set裡的關鍵字也是不可改變的。

2.map的insert操作:返回值是乙個pair,first成員是乙個迭代器,指向元素,second是插入成功與否。

3.erase引數可以是迭代器或者key。

4.對map使用下標,注意和陣列使用下標的區別。

5.訪問元素:find,count,lower_bound和upper_bound。可以組合lower_bound和upper_bound來獲得乙個範圍。二者組合的功能和equal_range一樣。

6.無序容器使用雜湊技術,儲存上組織為一組桶。

第12章 動態記憶體

1。動態分配的物件的生存期只有當顯式地釋放時才會銷毀,跟它在**被建立無關。

2.靜態記憶體用來儲存區域性static物件,類static資料成員和定義在任何函式外地變數。棧記憶體儲存函式內費static物件。

3.自由記憶體空間叫堆。儲存動態分配的物件——在程式執行時分配的物件。

4.智慧型指標:shared_ptr和unique_ptr指標,都定義在memory標頭檔案中。

5.shared_ptr最安全的分配和使用動態記憶體的方式是用make_shared函式。

6.將乙個shared_ptr賦予另乙個shared_ptr會遞增賦值號右側shared_ptr的引用計數,遞減左側shared_ptr的引用計數。

7.直接管理記憶體,new delete。

8.對內建型別,預設初始化的物件的值是未定義的,值初始化時可以的。

9.定位new, int *p = new(nothrow) int;分配失敗,返回空指標,而不是std::bad_alloc。

10.delete必須接受乙個指向動態分配記憶體的指標或者空指標。

11.由內建指標(不是智慧型指標)管理的動態記憶體在被顯式釋放前,一直會存在。

12.delete後重置指標值,防止空懸指標。一般充值nullptr。

13.可以用new返回的指標來初始化智慧型指標。內建指標不能隱式轉換為智慧型指標,必須直接初始化。

14.不要混用普通指標和智慧型指標。

15.在new和delete**之間發生異常,異常未**獲的話,記憶體永遠不會被釋放。智慧型指標可以自動釋放。

16.當智慧型指標管理的資源不是new分配的記憶體時:建立shared_ptr時,可以傳遞乙個(可選)指向刪除器函式的引數,這樣指標被銷毀時,不會用delete,而是用刪除器函式。

17.unique_ptr獨有它指向的物件,因此不支援拷貝和賦值。特殊情況,即將銷毀的unique_pte可以,例如從函式返回。

18.unique_ptr使用release和reset將指標所有權轉交。

19.weak_ptr:指向shared_ptr管理的物件,不會影響shared_ptr的引用計數。lock()函式檢查其指向的物件是否存在。

20.new乙個陣列,int *p = new int[10];或者:typedef int arrt[10]; int *p = new arrt;

21.new陣列時,並未得到乙個陣列型別的物件,而是乙個指標。

22.動態分配乙個空陣列(長度0)時合法的。

23.釋放動態陣列:delete   p; p必須為空或指向動態分配的陣列。

24.unique_ptr可以管理動態陣列,unique_ptrup(new int[10]); up.release();自動用delete 銷毀指標;可以用下標訪問陣列中元素;

25.shared_ptr不支援管理動態陣列。除非提供自己定義的刪除器;不支援下標訪問元素;使用get()訪問。

26.allocator類把記憶體分配和物件構造分離。allocatoralloc;(物件), auto const p = alloc,allocate(n);分配記憶體。這種分配是未構造的。construct函式來構造物件。destroy來銷毀物件,deallocate來釋放記憶體。

C primer 關聯容器之map

先來一道程式看看吧。程式如下如題目要求是定義乙個map,將單詞與乙個行號的list關聯,list中儲存單詞出現的行號 現在繼續 定義乙個map,將單詞與乙個行號的list關聯,list中儲存單詞出現的行號 其中本來答案中需要in檔案流繫結,我卻用了兩個cin來控制檔案輸入單詞以及行號控制。在這裡需要...

C primer 關聯容器

pairp1 pairp1 v1,v2 v1為t1型別,v2為t2型別 make pair v1,v2 返回乙個pair物件 p.first p.second 關聯容器不能通過容器大小定義,不能用resize。mapm m2 mapm mapm b,e b,e為map迭代器。鍵必須支援 map ke...

C Primer 學習筆記之關聯容器

關聯容器 關聯容器支援通過鍵來高效地查詢和讀取元素。兩個基本的關聯容器型別是map和set。map的元素以鍵 值對的形式組織 鍵用作元素在map的索引,而值則表示所儲存和讀取的資料。set僅包含乙個鍵,並有效地支援關於某個鍵是否存在的查詢。set和map型別的物件不允許為同乙個鍵新增第二個元素。如果...