構造
介面
插入刪除
交換/清空
#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...