一、简介
List是STL里面的双向链表,相比于vector内存连续,list容器内部的元素之间的物理地址不一定是排列在一起的,符合链表的使用场景及特点。
二、链表结点结构体
既然是双向链表,就表示一个结点里面既保存了指向下一个结点的指针,也保存了指向上一个结点的指针,所以其结点结构体应该如下:
template<typename T>
struct MyListNode
{
MyListNode() {};
MyListNode(T val, MyListNode<T>* prev = nullptr, MyListNode<T>* next = nullptr)
: _val(val)
, _prev(prev)
, _next(next)
{};
MyListNode<T>* _prev;
MyListNode<T>* _next;
T _val;
};
三、迭代器类
包含该双向链表结点的前向迭代器类实现如下:
template<typename T, typename Ref = T&, typename Ptr = T*>
class ListIterator
{
public:
typedef MyListNode<T> Node;
typedef ListIterator<T, Ref, Ptr> iterator;
ListIterator(Node* node)
: _