使用<algorithm> sort </algorithm>对自定义链接列表进行排序

时间:2013-10-08 22:05:14

标签: c++ algorithm list sorting linked-list

我编写了自己的双向链表,包括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,指针和引用,但是当涉及到其他人时我就迷失了。我正在尝试做什么?谢谢!

1 个答案:

答案 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++来做到这一点 - 这是性能不佳的原因之一)。