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

2021-09-25 19:06:31 字數 1678 閱讀 2254

1. 什麼是雙向迴圈列表?

雙向鍊錶是對與 「迴圈鍊錶」 與 「雙向鍊錶」 的結合

注意:如果對 「迴圈鍊錶」 與 「雙向鍊錶」 不太熟識去看之前的文章! 這裡對鍊錶不做過多解析!

2. 鍊錶的架構!

prev 前驅

value 值

next 後繼指標

3. 直接上**!

這裡不會對 「萃取」 進行分析,所以我把 「萃取」 去掉。

本章節對原始碼進行部分閹割,來是原始碼更加容讀.

之後的章節在全部補充

(3 - 1) 預設鍊錶(不做任何操作)

// list.cpp

#include #include "list.h"

int main()

// list.h

#ifndef _lish_h

#define _lish_h

#include "malloc.h"

template // 定義模板

class list

struct _node;

public:

list():_head(_buynode()),_size(0){} // 預設實現 _head 鍊錶

protected:

_nodeptr _buynode()

private:

_nodeptr _head; // 雙向迴圈鍊錶的頭

_size_type _size; // 所儲存的鍊錶的個數

};#endif

這樣的無資料的鍊錶完成,雙向迴圈鍊錶預設生成 「頭」 的鍊錶。

——————————————————————————————————————————

(3 - 2) 預設鍊錶(實現 push_back 操作)

這裡我對鍊錶進行精簡,閹割很多東西。(上面看懂才看下面的)

// list.h

#ifndef _lish_h

#define _lish_h

template class list;

public:

list():_head(_buynode()),_size(0){} // 預設實現 _head 鍊錶

public:

void push_back(_ty &val)

protected:

_nodeptr _buynode()

private:

_nodeptr _head;

_size_type _size;

};#endif

// list.cpp

#include #include "list.h"

using namespace std;

int main();

listmylist;

for(int i = 0; i < 5; ++i)

}

鍊錶結構的圖,裡面需要自己體會!

C STL PJ 原始碼 list 原理解析

了解 c list 是屬於雙向迴圈鍊錶,就是 雙向鍊錶 與 迴圈鍊錶 的結合體。所以我們必須對 雙向鍊錶 與 迴圈鍊錶 了解必要的知識。下篇我們就解析 c list容器的奧秘吧!雙向鍊錶 1.雙向鍊錶的結構 表示的鍊錶的 前驅 prev 儲存位址 表示的鍊錶儲存的 值的部分 value 表示的鍊錶的...

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

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

List原始碼分析

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