在链表上实现随机访问迭代器

时间:2018-01-28 09:20:24

标签: c++ linked-list iterator

所以我有一个自定义链表。每个节点都是一个结构,它有一个指向下一个节点的下一个指针,而last-> next是null。

struct nodo {
    T value; 
    nodo *next;     

    nodo() : next(0) {}

    nodo(const T &v, nodo *n=0): value(v), next(n){}
};

我想在我的类中实现迭代器,因为我的类支持使用operator []进行随机访问,所以我选择实现Random Access Iterators。 现在,我的问题在于以下运算符:

difference_type operator-(const iterator &other) {

}

它返回此迭代器和其他迭代器之间的元素数,但我不确定实现它的最佳方式。

1 个答案:

答案 0 :(得分:3)

链接列表不是随机访问容器。您不能有意义地实现随机访问迭代,也不能为常规单链接或双链接列表实现常规operator[](size_t)

使用您的列表类的人不会期望随机访问迭代,并且会被它混淆。使用您的"随机访问的人#34;迭代器并发现它们不符合标准和惯例也会被混淆。

  

A RandomAccessIterator is a BidirectionalIterator that can be moved to point to any element in constant time.

只有当您的容器可以在常规时间内按索引访问元素时,如果您公开随机访问接口。