为链表(list)设计一个迭代器(补全STL源码剖析代码)
// mylist.h
#include <iostream>
#include <assert.h>
template <typename T>
class ListItem
{
public:
ListItem(T value = 0, ListItem* next = NULL):_value(value), _next(next) {}
T value() const { return _value; }
ListItem* next() const { return _next; }
//private:
T _value;
ListItem* _next;
};
template <typename T>
class List
{
public:
// 头插法
void insert_front(T value)
{
ListItem<T> *p = new ListItem<T>; // 申请一个结点
assert(NULL != p);
p->_value = value;
if ( NULL == _front && NULL == _end )
{
_front = _end = p;
}
else
{
p->_next = _front;
_front = p;
}
++_size;
}
// 尾插法
void insert_end(T value)
{
ListItem<T> *p = new ListItem<T>;
assert(NULL != p);
p->_value = value;
if ( NULL == _fro