(list模板类的方法接口:)
list(); // 构造器:链表为空
list(const list<T>& x); // 拷贝构造器
void push_front(const T& x); // 将 x 插入到这个链表的开头
void push_back(const T& x); // 在这个链表尾部插入 x
// 将 x 插入到调用前position所在位置的项的前面。返回位于 x 位置上的迭代器
iterator insert(iterator position, const T& x);
void pop_front(); // 将调用前这个链表开头的项从链表中删除
void pop_back(); // 将调用前这个链表尾部的项从链表中删除
void erase(iterator position); // 将调用前position位置上的项从链表中删除
// 将调用前所有位于 first(包括first) 和 last(不包括last) 之间的项从链表中删除
void erase(iterator first, iterator last);
unsigned size() const; // 返回这个链表中项的数量
bool empty() const; // 链表为空 ? true : false
iterator begin(); // 返回位于这个链表开头的迭代器
iterator end(); // 返回位于这个链表末尾的迭代器
list<T>& operator=(const list<T>& x); // 重载赋值运算符
// 从position位置开始将 x 的内容插入这个链表,然后 x 为空
void splice(iterator position, list<T>& x);
void sort(); // 这个链表中的项按照升序排列
(迭代器接口:)
iterator& operator++(); // ++iter;
iterator& operator++(int); // iter++;
iterator& operator--(); // --iter;
iterator& operator--(int); // iter--;
T& operator*(); // *iter;
bool operator==(const iterator& x);
bool operator!=(const iterator& x);
1)list中没有 operator[],意味着list缺少随机访问属性;
2) list中的插入与删除操作没有项的移动,而vector与deque中插入与删除可能导致许多项的移动;
list模板类可能的字段:
template <class T>
class list
{
protected:
unsigned length;
struct list_node
{
T data; // 项
list_node *next;// 指向下一项
list_node *prev;// 指向前一项
};
list_node *node; // 头节点
public:
class iterator
{
protected:
list_node *node;
iterator(list_node *x): node(x)