C STL PJ 原始碼 list 原理解析

2021-09-25 16:26:03 字數 1449 閱讀 4705

了解:c++ list 是屬於雙向迴圈鍊錶,就是 「雙向鍊錶」 與 「迴圈鍊錶」 的結合體。所以我們必須對 

「雙向鍊錶」 與 「迴圈鍊錶」 了解必要的知識。下篇我們就解析 c++ list容器的奧秘吧!

雙向鍊錶

1. 雙向鍊錶的結構:

表示的鍊錶的 「前驅」 (prev),儲存位址

表示的鍊錶儲存的 「值的部分」 (value)

表示的鍊錶的 「後繼指標」 (next),儲存位址

2. 雙向鏈的實現原理

注意:這個圖畫的不是很好,等下我會說這個圖不好理由!

為了更好理解:我重新設定圖

分別有三個鍊錶:x1 , x2 , x3

x1 的位址為 0x61ff18

x2 的位址為 0x61ff19

x3 的位址為 0x61ff20

跟據這個圖

我們發現

x1 前驅:前面沒有鍊錶了 ,所以 x1 的 「前驅」 為 null 。

x1 值的部分:儲存乙個 12 的數字。

x1 後繼指標:指向了下乙個鍊錶(注意:這個不是指向下一鍊錶的 「前驅」)。

x1 的結構是這樣的

x2 結構是這樣的

迴圈鍊錶

1. 迴圈鍊錶的結構:

表示的鍊錶儲存的 「值的部分」 (value)

表示的鍊錶的 「後繼指標」 (next),儲存位址

2. 迴圈鍊錶的實現原理

分別有三個鍊錶:x1 , x2 , x3

x1 的位址為 0x61ff18

x2 的位址為 0x61ff19

x3 的位址為 0x61ff20

C STL PJ 原始碼 list 原理解析2

1.什麼是雙向迴圈列表?雙向鍊錶是對與 迴圈鍊錶 與 雙向鍊錶 的結合 注意 如果對 迴圈鍊錶 與 雙向鍊錶 不太熟識去看之前的文章!這裡對鍊錶不做過多解析!2.鍊錶的架構!prev 前驅 value 值 next 後繼指標 3.直接上 這裡不會對 萃取 進行分析,所以我把 萃取 去掉。本章節對原始...

《STL 原始碼剖析》 list 實現原理

目錄list對空間的運用是精準的,不浪費的。對於任何位置的元素插入 或 元素移除,list永遠是常數時間。list實現上就是乙個雙向迴圈鍊錶,list節點 有prev 和 next 兩個指標。因為list是乙個雙向鍊錶,他的迭代器就必須具備前移 後移的能力。list提供的是 bidirectiona...

List原始碼分析

list 是繼承colection的介面 我們主要學習他的實現類 arraylist 和 linkedlist arraylist是基於陣列實現的 與陣列不同的是 它可以存放不同的資料型別的資料而且長度不定 我們分析一下他的底程實現 新增過程 public boolean add e e 如何做到長...