C STL(面試複習整理)

2021-09-18 07:04:36 字數 3248 閱讀 7080

hash表為底層的容器及hash表

智慧型指標

stl六大元件

容器:資料結構,用來存放資料

演算法:常用演算法

迭代器:容器和演算法之間的膠合劑,「范型指標」

仿函式:一種過載了operator()的類,使得這個類的使用看上去像乙個函式

配置器:為容器分配並管理記憶體

介面卡:修改其他元件介面

底層為陣列,支援隨機訪問,節點大小是動態的,支援下標訪問。隨機訪問效率很高(o(1)),插入效率不高。

擴容原理:以原大小的兩倍配置乙份新空間,將原空間資料拷貝過來,會導致迭代器失效

常用函式

size():當前vector元素個數

capacity():vector已分配空間容量

reserve():預分配空間,分配空間小於現有空間,不改變空間容量

resize():改變size大小,不改變容量大小

#include

#include

#include

#include

using namespace std;

void

push

(vector<

int>

&vec,

int i)

intmain()

cout<<

"vec中元素現為"

int>

::iterator iter=vec.

begin()

;while

(iter!=vec.

end())

cout

resize(2

);cout<<

"在vec.resize(2)後"

"vec.size()="

<<

" vec.capacity()="

"vec中元素變為"

begin()

;while

(iter!=vec.

end())

cout

reserve(3

);cout<<

"在vec.reserve(3)後"

"vec.size()="

<<

" vec.capacity()="

reserve(5

);cout<<

"在vec.reserve(5)後"

"vec.size()="

<<

" vec.capacity()="

}

結果為:

vector未放入元素時

vec.size()=0 vec.capacity()=0

vector放入1個元素時

vec.size()=1 vec.capacity()=1

vector放入2個元素時

vec.size()=2 vec.capacity()=2

vector放入3個元素時

vec.size()=3 vec.capacity()=4

vec中元素現為

1 2 3

在vec.resize(2)後

vec.size()=2 vec.capacity()=4

vec中元素變為

1 2在vec.reserve(3)後

vec.size()=2 vec.capacity()=4

在vec.reserve(5)後

vec.size()=2 vec.capacity()=5

底層為雙向鍊錶,記憶體空間不連續,只能通過指標訪問資料,插入刪除高效,隨機訪問非常沒有效率。適用於物件需要大量刪除插入操作的環境。

list的iterator不支援+,+=,《操作

list.sort():合併前兩個元素,合併後兩個元素,兩個子串行合併,序列大小變化順序為2->4->8->16…完成排序(o(log(n)))

雙向佇列,乙個**控制器+多個緩衝區,支援首尾快速增刪,支援隨機訪問。

底層為deque/list,封閉頭部,不使用vector作為底層的原因是vector擴容耗時。

queue:底層為deque/list,封閉頭部,不使用vector作為底層的原因是vector擴容耗時。

priority_queue:優先佇列,以vector為底層,以heap為處理規則管理底層實現。

有序元素可重複

set是

否multiset是是

map是

否multimap是是

插入刪除,查詢時間複雜度為o(log(n))

作為關聯容器,set不同於map的地方在於,set的key就是value。

紅黑樹的特點:根節點是黑色,葉節點是黑色的null節點,任意節點到其葉節點經過的黑色節點數量是相同的。

去除掉黑色null節點,紅黑樹是一層黑一層紅。

紅黑樹是近平衡的二叉搜尋樹,和平衡二叉搜尋樹相比,紅黑樹的平衡沒有那麼平衡,插入後可以保證調整三次之間可以使樹達到平衡條件。

有序元素可重複

hash_set否否

hash_multiset否是

hash_map否否

hash_multimap否是

查詢時間複雜度o(1)

封裝普通指標使其表現的像普通指標一樣。超過類的作用域,將會自己呼叫析構函式,自動釋放資源

auto_ptr:不可以用於容器,不建議使用,不支援複製和賦值,如果進行了賦值和複製操作,並不報錯

unique_ptr:不支援複製和賦值,直接賦值會報錯,同一時刻物件僅能擁有乙個unique_ptr指向自身

shared_ptr:解決指標間物件共享所有權的問題,auto_ptr是獨享,允許多個指標指向同乙個物件。基於引用計數,不要乙個原始指標初始化多個shared_ptr,避免迴圈使用避免記憶體洩露。

物件初始化時應用數為1,指向物件成為另乙個物件副本,引用數加一,析構減一。

weak_ptr:不控制物件生命週期的智慧型指標,只提供了管理物件的訪問手段,用於協助shared_ptr的工作,用於觀測資源的使用情況。use_count()可以一觀察資源的應用數。

面試複習鏈結整理

1.densenet詳解 2.機器學習與深度學習常見面試題 3.機器學習與深度學習核心知識點總結 4.深度卷積神經網路演化歷史及結構改進網路 5.怎樣成為一名優秀的演算法工程師 6.知識庫 技術文章 7.理解概率密度函式 9.eco efficient video understanding 10....

作業系統(面試複習整理)

程序和執行緒 併發和並行 2 cpu排程 記憶體分配 3 磁碟排程 pcb程序狀態 程序編號 程式計數器 即將執行的下個指令位址 暫存器記憶體界限 開啟檔案列表 cpu排程資訊 fork 建立子程序 exec 代替父程序 wait 父程序等待子程序消亡 子程序繼承父程序 1 使用者號 uids 和使...

資料整理,SQL Server ,面試前複習筆記

t sql 要掌握的知識點分類 sql 是一門 ansi 的標準計算機語言,用來訪問和運算元據庫系統。sql 語句用於取回和更新資料庫中的資料。sql 可與資料庫程式協同工作,比如 ms access db2 informix ms sql server oracle sybase 以及其他資料庫系...