C++ 11標準之中,定義了unordered_map,就是一種hash_map 。程序員
相同點:安全
1. 兩者的用法相同,有insert,size,count等操做。全部元素是以pair類型存儲。函數
不一樣點:指針
1. 底層實現不一樣。map是基於rb_tree, hash_map是基於哈希表。對象
2. hash_map的速度更快,查找速度爲O(1)。map的查找速度是O(log(n))。插入數據的速度一樣,hash_map的速度會快不少。內存
3. hash_map相比於map會消耗更多的存儲空間,因此須要控制內存空間的時候需慎重使用hash_map。字符串
1. vector爲對象分配連續的空間,因此隨機訪問的效率很高。適合存儲小容量內容。大容量數據的話,vector的開銷成本太大。編譯器
2. list 是離散存儲的,在首尾插入元素,效率很高。hash
vector:對象數量變化少,隨機訪問元素頻繁。編譯
list: 對象數量變化大,對象複雜,插入和刪除頻繁。
1. 棧: 編譯器自動分配和釋放。存放局部變量值等等。
2. 堆: 程序員分配和釋放,或者程序結束時候OS回收。
3. 全局區(靜態區):這兩者在一塊兒。程序結束以後釋放。
4. 文字常量區:常量字符串存放的地方。
5. 程序代碼區:存放程序代碼。
它是存儲指向動態分配對象指針的類,用於生存期控制,可以自動正確的銷燬動態分配的對象,防止內存泄露。他使用的方法是引用計數。每次建立智能指針類的對象時,計數置爲1。對該對象賦值時,賦值操做符作操做時所指向的對象減掉1。右操做符指向對象計數+1。若是引用計數減爲0,刪除基礎對象。
多態就是講子類類型的指針賦值給父類類型的指針。
虛函數經過一張虛函數表實現。當咱們用父類指針操做子類時,用這張表來查找實際應該調用哪個函數。
引用不能爲空,指針可爲空,不過最好不要爲空。
引用定義時必須初始化,指針沒必要。
引用不改變指向,指針會。
引用更安全。
靜態綁定:對象是靜態類型。出虛函數以外全都是靜態綁定。
動態綁定:對象是動態的類型。發生在運行期。只有虛函數可使用。