模擬實現list

2021-10-03 17:22:01 字數 2776 閱讀 1818

構造

介面

插入刪除

交換/清空

#include

using

namespace std;

// list的節點類

template

<

class

t>

struct listnode

listnode

* _ppre;

listnode

* _pnext;

t _val;};

//list的迭代器類

template

<

classt,

class

ref,

class

ptr>

class

listiterator

listiterator

(const self& l)

:_pnode

(l._pnode)

//返回val的引用

t&operator*(

)//返回val的位址

t*operator

->()

self&

operator++(

) self operator++(

int)

self&

operator--(

) self&

operator--(

int)

bool

operator!=(

const self& l)

bool

operator==(

const self& l)

pnode _pnode;};

//list類

template

<

class

t>

class

list

//list

(int n,

const t& value =t(

))}//迭代器建構函式

template

<

class

iterator

>

list

(iterator first, iterator last)

}//拷貝構造

list

(list

& l)

list

&operator=(

const list l)

~list()

///// list iterator

iterator begin()

iterator end()

const_iterator const_begin()

const_iterator const_end()

///// list capacity

size_t size()

const

return count;

}bool

empty()

const

// list access

const t&

front()

const

t&front()

t&back()

const t&

back()

const

// list modify

void

push_back

(const t& val)

void

pop_back()

void

push_front

(const t& val)

void

pop_front()

// 在pos位置前插入值為val的節點

iterator insert

(iterator pos,

const t& val)

// 刪除pos位置的節點,返回該節點的下乙個位置

iterator erase

(iterator pos)

return

nullptr;}

//清空鍊錶

void

clear()

delete cur;

cur =

nullptr;}

}void

swap

(list

& l)

//第二步: 判斷多出來的那個

if(oldnode != l._phead)

_phead-

>_ppre = newnode;

newnode-

>_pnext = _phead;

}else

if(newnode != _phead)

l._phead-

>_ppre = oldnode;

oldnode-

>_pnext = l._phead;}}

private

://建立頭節點

void

createhead()

pnode _phead;};

void

testinsert()

void

testn_val()

void

testerase()

void

testiterator()

void

testcpy()

void

testoperator()

intmain()

模擬實現 list

鍊錶前面我已經寫過了,不過寫的是單鏈表,而c 庫中的list是雙鏈表,那麼,我們就來模擬實現一下雙鏈表,這樣對於庫中的list也會有更加深刻的了解。那麼首先我們先來了解一下雙鏈表的結構,雙鏈表無非就是比單鏈表多了一條鏈,單鏈表只有一條指向下乙個節點的鏈,而雙鏈表會多一條指向前乙個節點的鏈。說白了就是...

C 模擬實現List

雙向鍊錶 include includeusing namespace std typedef nodenode templatestruct node t data 鍊錶中的資料 node pnext 下乙個節點 node ppre 前乙個節點 templateclass list templat...

STL 模擬實現list

list是標準模板庫中的乙個容器,實際上是一條帶頭節點的雙向鍊錶。通過與迭代器的組合使用,使得工作效率大大提高。要注意 迭代器只是為了訪問 修改和遍歷物件,不對空間進行管理。pragma once include using namespace std 定義鍊錶結點結構體 templatestruc...