C++ 使用<;对自定义链接列表进行排序;算法>;分类
我已经编写了自己的双链接列表,包括begin()和end()迭代器。使用循环遍历列表可以很好地解决这些问题。然而,作为我任务的一部分,我需要根据某些标准对列表进行排序。由于我们还没有涉及排序算法这一章,我们可以使用标题中定义的排序函数。但是sort(list.begin()、list.end()、compare)返回了许多与迭代器类相关的错误:C++ 使用<;对自定义链接列表进行排序;算法>;分类,c++,algorithm,list,sorting,linked-list,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
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
此外,我还收到有关+和-运算符的错误。我知道如何定义值类型、指针和引用,但当涉及到其他值时,我就不知所措了。我想做的事可能吗?谢谢 这是可能的,但可能会有点痛苦,因为您最终会编写大量样板代码 更糟糕的是,完成后,它不会很好地工作--
std::sort
并不完全需要随机访问迭代器,但如果使用(比如)双向迭代器,性能通常会相当差。例如,与大多数标准容器不同,std::list
有一个sort
成员函数来弥补std::sort
在链表上工作不好的事实
基本上,
operator+
和operator-
只需向前或向后移动指针N项。通常,您会重载operator++
以前进一步,例如pos=pos->next
(和操作符--
使用类似于pos=pos->prev;
。然后您可以使用std::advance
或std::next
一次推进多个项目(但请注意:对于双向迭代器,它将通过反复调用++
或--
来实现这一点,这是性能不佳的原因之一).所以,可能最好只写我自己的排序算法,哈哈?@RobRob:不幸的是,是的。更好的是:避免使用链表,因为链表很少有用。啊,好吧。老实说,我很想这么做,但因为这是一个作业,我一定要使用链表,哈哈。