所以我有一个自定义链表。每个节点都是一个结构,它有一个指向下一个节点的下一个指针,而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) {
}
它返回此迭代器和其他迭代器之间的元素数,但我不确定实现它的最佳方式。
答案 0 :(得分:3)
链接列表不是随机访问容器。您不能有意义地实现随机访问迭代,也不能为常规单链接或双链接列表实现常规operator[](size_t)
。
使用您的列表类的人不会期望随机访问迭代,并且会被它混淆。使用您的"随机访问的人#34;迭代器并发现它们不符合标准和惯例也会被混淆。
只有当您的容器可以在常规时间内按索引访问元素时,如果您公开随机访问接口。