C++ 面試準備題

C++ STL 裏map 和 hash_map的異同

答:

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。字符串

list 和 vector 的區別

1. vector爲對象分配連續的空間,因此隨機訪問的效率很高。適合存儲小容量內容。大容量數據的話,vector的開銷成本太大。編譯器

2. list 是離散存儲的,在首尾插入元素,效率很高。hash

適用對象:

vector:對象數量變化少,隨機訪問元素頻繁。編譯

list: 對象數量變化大,對象複雜,插入和刪除頻繁。

C++ 佔用的內存有哪些部分

1. 棧: 編譯器自動分配和釋放。存放局部變量值等等。

2. 堆: 程序員分配和釋放,或者程序結束時候OS回收。

3. 全局區(靜態區):這兩者在一塊兒。程序結束以後釋放。

4. 文字常量區:常量字符串存放的地方。

5. 程序代碼區:存放程序代碼。

介紹下C++智能指針

它是存儲指向動態分配對象指針的類,用於生存期控制,可以自動正確的銷燬動態分配的對象,防止內存泄露。他使用的方法是引用計數。每次建立智能指針類的對象時,計數置爲1。對該對象賦值時,賦值操做符作操做時所指向的對象減掉1。右操做符指向對象計數+1。若是引用計數減爲0,刪除基礎對象。

C++的多態

多態就是講子類類型的指針賦值給父類類型的指針。

虛函數

虛函數經過一張虛函數表實現。當咱們用父類指針操做子類時,用這張表來查找實際應該調用哪個函數。

指針和引用的區別

引用不能爲空,指針可爲空,不過最好不要爲空。

引用定義時必須初始化,指針沒必要。

引用不改變指向,指針會。

引用更安全。

動態綁定和靜態綁定的區別

靜態綁定:對象是靜態類型。出虛函數以外全都是靜態綁定。

動態綁定:對象是動態的類型。發生在運行期。只有虛函數可使用。

相關文章
相關標籤/搜索