實現乙個STL的list容器

2021-10-08 01:19:39 字數 2440 閱讀 3256

封裝了list的資料結構,和push_back(),push_front(),pop_back(),pop_front(),size()方法,內嵌了iterator迭代器類,還寫了for_each()accumulate()模板演算法

#include

// #include

// #include

#include

using

namespace std;

namespace ministl};

node* head,

*tail;

size_t _size;

public

:list()

:head

(null),

tail

(null),

_size(0

)// 拷貝構造/賦值運算子過載函式

~list()

head = tail =

null

; _size =0;

}void

push_back

(const t& val)

else

}void

push_front

(const t& val)

else

}void

pop_back()

void

pop_front()

size_t size()

const

t&operator

(int index)

return p-

>val;

}class

iterator

t&operator*(

) t*

operator

->()

iterator operator++(

) iterator operator++(

int)

iterator operator--(

) iterator operator--(

int)

bool

operator==(

const iterator& it)

const

bool

operator!=(

const iterator& it)

const};

iterator begin()

// 頭節點的next是下標為0的元素

iterator end()

};template

<

typename it,

typename func>

void

for_each

(it first,it last,func func)

}template

<

typename it,

typename val>

val accumulate

(it first,it last,val val)

return val;}}

using

namespace ministl;

intmain()

list<

int>

::iterator it = li.

begin()

;while

(it!=li.

end())

cout << endl;

for(

int i=

0;isize()

;++i)

cout << endl;}/*

li.push_front(0);

li.push_front(-1);

li.push_front(-2);

li.pop_back();

li.pop_back();

li.pop_back();

li.pop_back();

li.pop_back();

li.pop_back();

li.push_front(-1);

li.push_front(-2);

li.pop_front();

li.pop_front();

for_each(li.begin(),li.end(),(int n));

cout<< accumulate(li.begin(),li.end(),0) << endl;

cout << int() << endl;

cout << float() << endl;

*/}

STL容器List的乙個小技巧

在stl中,list是乙個雙向迴圈鍊錶,所謂迴圈鍊錶就是指鍊錶的頭部和尾部是連線在一起的,下面兩段 實現的功能是一樣的,但是執行過程卻有所不同 第一種 listlst1 if lst1.empty 第二種 listlst2 if lst2.size 0 上面兩段 執行的功能都一樣的,都是判斷list...

實現乙個STL的vector容器

封裝了vector的資料結構,和push back capacity size 方法,內嵌了iterator迭代器類 include include using namespace std namespace ministl vector 拷貝建構函式 賦值運算子過載函式 void push bac...

STL之list容器的實現框架

list的底層採用資料結構是環形的雙向鍊錶。相對於vector容器。list容器插入和刪除操作付出的代價要比vector容器小得多,可是list帶有鍊錶的天生弱點。就是不支援隨機訪問。從內建的迭代器角度分析。vector容器相應的迭代器為隨機訪問迭代器,而list容器內建的迭代器則為雙向迭代器。我們...