C vector底層資料結構

2021-10-08 05:03:04 字數 453 閱讀 3863

vector

其底層資料結構是陣列,由於陣列的特點,vector也具有以下特性:

1、o(1)時間的快速訪問;

2、順序儲存,所以插入到非尾結點位置所需時間複雜度為o(n),刪除也一樣;

3、擴容規則:

當我們新建乙個vector的時候,會首先分配給他一片連續的記憶體空間,如std::vector vec,當通過push_back向其中增加元素時,如果初始分配空間已滿,就會引起vector擴容,其擴容規則在gcc下以2倍方式完成:

首先重新申請乙個2倍大的記憶體空間;

然後將原空間的內容拷貝過來;

最後將原空間內容進行釋放,將記憶體交還給作業系統;

注意:根據vector的插入和刪除特性,以及擴容規則,我們在使用vector的時候要注意,在插入位置和刪除位置之後的所有迭代器和指標引用都會失效,同理,擴容之後的所有迭代器指標和引用也都會失效。

end

redis set底層資料結構

redis的集合物件set的底層儲存結構特別神奇,我估計一般人想象不到,底層使用了intset和hashtable兩種資料結構儲存的,intset我們可以理解為陣列,hashtable就是普通的雜湊表 key為set的值,value為null 是不是覺得用hashtable儲存set是一件很神奇的事...

Redis底層資料結構?

福哥口訣法 簡鏈字跳整 壓快壓 sds synamic string 簡單動態字串。支援自動動態擴容的位元組陣列 list 鍊錶 雙端鍊錶。dict 字典。使用雙雜湊表實現的,支援平滑擴容的字典 zskiplist 跳躍表。附加了後向指標的跳躍表 intset 整數集合。用於儲存整數數值集合的自有結...

Redis底層資料結構

redis底層實現的8種資料結構 sds synamic string 支援自動動態擴容的位元組陣列 list 鍊錶 dict 使用雙雜湊表實現的,支援平滑擴容的字典 zskiplist 附加了後向指標的跳躍表 intset 用於儲存整數數值集合的自有結構 ziplist 一種實現上類似於tlv,但...