注意:
在stl裡面運用的是空間配置器,但是這次我暫時沒有用空間配置器,後面我會帶上空間配置器再實現一遍。
#include#includeusing namespace std;
templatestruct _listnode
};templatestruct _listiterator
_listiterator(node* node)
:_node(node)
{} bool operator != (const self& s)
bool operator == (const self& s)
//前置加加
self& operator++()
//後置加加
self operator++(int)
ref operator*()
ptr operator->()
//前置減減
self& operator--()
self operator--(int)
};templateclass _list
_list()
:_phead(buynode(t())) //引數可以傳乙個臨時物件
//插入資料
void push(const t&x)
//刪除資料
void pop()
//頭插
void pushfront(const t& x)
//頭刪
void popfront()
//在特定位置插入一段區間
template void insert(iterator pos,inputiterator first, inputiterator last) }
//在特定的位置插入資料
iterator insert(iterator pos, const t& x)
//刪除特定位置的資料
iterator erase(iterator pos)
//const iterator begin()const
const iterator end()const
iterator begin()
iterator end()
protected:
node* _phead;
};
/***********************測試函式************************/
//測試插入資料和刪除資料
void test1()
coutl1.push(1);
l1.push(2);
l1.push(3);
l1.push(4);
l1.pushfront(5);
_list::iterator it1 = l1.begin();
while(it1 != l1.end())
coutl1.push(1);
l1.push(2);
l1.push(3);
l1.push(4);
_list::iterator it1 = l1.begin();
it1 = l1.insert(it1,6); //insert函式有返回值,所以用迭代器返回
while(it1 != l1.end())
coutl1.push(1);
l1.push(2);
l1.push(3);
l1.push(4);
_listl2;
l2.push(12);
l2.push(22);
l2.push(32);
l2.push(42);
_list::iterator it1 = l1.begin();
l1.insert(it1,l2.begin(),l2.end());
it1 = l1.begin();
while(it1!= l1.end())
cout<
STL 模擬實現list
list是標準模板庫中的乙個容器,實際上是一條帶頭節點的雙向鍊錶。通過與迭代器的組合使用,使得工作效率大大提高。要注意 迭代器只是為了訪問 修改和遍歷物件,不對空間進行管理。pragma once include using namespace std 定義鍊錶結點結構體 templatestruc...
stl 模擬實現list
list 是最常用的 stl 庫之一,它的底層就是乙個帶頭的雙向迴圈鍊錶,所以我們在使用時也可以把它想象成這種鍊錶。下面我們模擬實現list。在模擬實現 list 之前,我們首先要明確 list 的迭代器。迭代器的型別有兩種,第一種就是原生態的指標,例如vector的迭代器。第二種就需要我們自己來封...
STL 模擬實現List
list是可以在常數範圍內在任意位置進行插入和刪除的序列式容器,並且該容器可以前後雙向迭代,list的底層是雙向鍊錶結構。如下demo,我們分別用正向迭代器和反向迭代器訪問list元素 int main list int l1 array,array sizeof array sizeof arra...