我编写了自己的双向链表,包括begin()和end()迭代器。这些可以使用循环遍历列表。但是,作为我的任务的一部分,我需要根据某些标准对列表进行排序。由于我们尚未介绍有关排序算法的章节,因此我们可以使用标题中定义的排序函数。但sort(list.begin(),list.end(),compare)会返回与我的迭代器类相关的一些错误:
error: no type named iterator_category
error: no type named value_type
error: no type named difference_type
error: no type named pointer
error: no type named reference
此外,我收到有关+和 - 运算符的错误。我理解如何定义value_type,指针和引用,但是当涉及到其他人时我就迷失了。我正在尝试做什么?谢谢!
答案 0 :(得分:1)
这是可能的,但可能有点痛苦,因为你最终会写出大量的样板代码。
更糟糕的是,当你完成后,它将无法正常工作 - std::sort
并非绝对需要随机访问迭代器,而是使用(比方说)双向迭代器,性能通常会相当差。例如,它足够糟糕(与大多数标准容器不同)std::list
具有sort
成员函数,以弥补std::sort
在链接列表上工作不佳的事实。
基本上,operator+
和operator-
只是向前或向后推进指针N项。通常,您将operator++
重叠一次,例如pos = pos -> next;
(operator--
使用类似pos = pos->prev;
的内容。然后您可以使用std::advance
或{{1}一次超过一个项目(但请注意:对于双向迭代器,它会通过反复调用std::next
或++
来做到这一点 - 这是性能不佳的原因之一)。