柚子快報(bào)激活碼778899分享:C++面試---小米
柚子快報(bào)激活碼778899分享:C++面試---小米
一、static 關(guān)鍵字的作用,及和const的區(qū)別 static關(guān)鍵字作用: 1、在類的成員變量前使用,表示該變量屬于類本身,而不是任何類的實(shí)例。 2、在類的成員函數(shù)前使用,表示該函數(shù)不需要對(duì)象實(shí)例即可調(diào)用,且只能訪問類的靜態(tài)成員變量和其他靜態(tài)成員函數(shù)。 3、在局部變量前使用,表示該變量在函數(shù)調(diào)用結(jié)束后不會(huì)被銷毀,而是保持其值不變。 4、在全局變量或函數(shù)前使用,限制其作用范圍僅在定義的文件內(nèi),對(duì)其他文件不可見。
static和const區(qū)別: 1、static關(guān)鍵字用來定義靜態(tài)變量,其生命周期為程序執(zhí)行期間,但它的作用域限定于定義它的文件或函數(shù)內(nèi)。 2、const關(guān)鍵字定義常量,其值在定義后不能被修改,用來保證數(shù)據(jù)的不變性。它只影響它所修飾的變量的可變性,而不影響其生命周期。
二、extern 關(guān)鍵字的作用 主要作用是: 1、允許在多個(gè)文件中訪問同一個(gè)全局變量或函數(shù)。 2、表明變量或函數(shù)的定義存在于其他文件中。
三、指針和引用的區(qū)別
1、指針是一個(gè)變量,其值為另一個(gè)變量的地址,通過地址,可以直接訪問和修改對(duì)應(yīng)內(nèi)存中的值。 2、引用是別名,它為對(duì)象提供了一個(gè)新的名字,對(duì)引用的操作等同于對(duì)對(duì)象本身的操作。 3、指針可以為空,引用必須綁定到一個(gè)對(duì)象。 4、指針的值(即所指對(duì)象的地址)可以改變,但引用一旦與某個(gè)對(duì)象綁定,就不能再改變引用到其他對(duì)象。
四、c++內(nèi)存分配的方式
1、靜態(tài)存儲(chǔ):編譯時(shí)分配,如全局變量、靜態(tài)變量。 2、自動(dòng)存儲(chǔ):函數(shù)內(nèi)部聲明的變量,如局部變量,隨著函數(shù)調(diào)用創(chuàng)建和退出銷毀。 3、動(dòng)態(tài)存儲(chǔ):使用new和delete進(jìn)行手動(dòng)分配和釋放的堆內(nèi)存。
五、靜態(tài)內(nèi)存分配和動(dòng)態(tài)內(nèi)存分配的區(qū)別,靜態(tài)分配的優(yōu)缺點(diǎn)
區(qū)別: 1、靜態(tài)內(nèi)存分配在編譯時(shí)就確定了存儲(chǔ)空間的大小和生命周期,通常用于全局變量和靜態(tài)局部變量。 2、動(dòng)態(tài)內(nèi)存分配在運(yùn)行時(shí)根據(jù)需要?jiǎng)討B(tài)地分配和釋放內(nèi)存,通常使用new和delete操作符。
靜態(tài)內(nèi)存分配的優(yōu)點(diǎn): 1、管理簡(jiǎn)單,沒有額外的運(yùn)行時(shí)開銷。 2、生命周期長,隨程序啟動(dòng)創(chuàng)建,程序結(jié)束時(shí)銷毀。
靜態(tài)內(nèi)存分配的缺點(diǎn): 1、靈活性低,必須提前預(yù)知并定義所需內(nèi)存大小。 2、可能會(huì)導(dǎo)致內(nèi)存浪費(fèi),若預(yù)分配內(nèi)存未被充分利用
六、講一下c++智能指針及shared_ptr的底層實(shí)現(xiàn) unique_ptr:獨(dú)占所有權(quán),不支持復(fù)制和賦值操作。 shared_ptr:引用計(jì)數(shù)機(jī)制,多個(gè)智能指針可以共享同一個(gè)對(duì)象。 weak_ptr:不對(duì)對(duì)象的所有權(quán)計(jì)數(shù),用于解決shared_ptr的循環(huán)引用問題。
shared_ptr的底層實(shí)現(xiàn) 包括兩個(gè)主要部分: 1、控制塊:存儲(chǔ)引用計(jì)數(shù)和指向動(dòng)態(tài)分配的對(duì)象的指針。 2、智能指針對(duì)象:包含對(duì)控制塊的引用。
七、map 和 unordered_map 區(qū)別 map: 1、基于紅黑樹實(shí)現(xiàn)。 2、元素按鍵自動(dòng)排序。 3、查找、插入和刪除操作的時(shí)間復(fù)雜度為O(log n)。
unordered_map: 1、基于哈希表實(shí)現(xiàn)。 2、元素不排序,按哈希值存儲(chǔ)。 3、平均情況下查找、插入和刪除操作的時(shí)間復(fù)雜度為O(1),最壞情況為O(n)。
八、STL有哪些容器,各自特點(diǎn)
序列容器: 1、vector:動(dòng)態(tài)數(shù)組,支持快速隨機(jī)訪問。 2、list:雙向鏈表,支持快速插入和刪除。 3、deque:雙端隊(duì)列,兩端都可以快速插入和刪除。
關(guān)聯(lián)容器: 1、set:集合,元素唯一且自動(dòng)排序。 2、map:鍵值對(duì)集合,鍵唯一且自動(dòng)排序。 3、multiset:集合,元素可以重復(fù),自動(dòng)排序。 4、multimap:鍵值對(duì)集合,鍵可以重復(fù),自動(dòng)排序。
無序關(guān)聯(lián)容器(C++11新增): 1、unordered_set:集合,元素唯一,基于哈希表實(shí)現(xiàn),不排序。 2、unordered_map:鍵值對(duì)集合,鍵唯一,基于哈希表實(shí)現(xiàn),不排序。 3、unordered_multiset:集合,元素可以重復(fù),基于哈希表實(shí)現(xiàn),不排序。 4、unordered_multimap:鍵值對(duì)集合,鍵可以重復(fù),基于哈希表實(shí)現(xiàn),不排序。
適配器容器: 1、stack:棧,后進(jìn)先出。 2、queue:隊(duì)列,先進(jìn)先出。 3、priority_queue:優(yōu)先隊(duì)列,元素按優(yōu)先級(jí)出隊(duì)。
柚子快報(bào)激活碼778899分享:C++面試---小米
參考鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。