封裝了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容器內建的迭代器則為雙向迭代器。我們...