Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用<;对自定义链接列表进行排序;算法>;分类_C++_Algorithm_List_Sorting_Linked List - Fatal编程技术网

C++ 使用<;对自定义链接列表进行排序;算法>;分类

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

我已经编写了自己的双链接列表,包括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

此外,我还收到有关+和-运算符的错误。我知道如何定义值类型、指针和引用,但当涉及到其他值时,我就不知所措了。我想做的事可能吗?谢谢

这是可能的,但可能会有点痛苦,因为您最终会编写大量样板代码

更糟糕的是,完成后,它不会很好地工作--
std::sort
并不完全需要随机访问迭代器,但如果使用(比如)双向迭代器,性能通常会相当差。例如,与大多数标准容器不同,
std::list
有一个
sort
成员函数来弥补
std::sort
在链表上工作不好的事实


基本上,
operator+
operator-
只需向前或向后移动指针N项。通常,您会重载
operator++
以前进一步,例如
pos=pos->next
(和
操作符--
使用类似于
pos=pos->prev;
。然后您可以使用
std::advance
std::next
一次推进多个项目(但请注意:对于双向迭代器,它将通过反复调用
++
--
来实现这一点,这是性能不佳的原因之一).

所以,可能最好只写我自己的排序算法,哈哈?@RobRob:不幸的是,是的。更好的是:避免使用链表,因为链表很少有用。啊,好吧。老实说,我很想这么做,但因为这是一个作业,我一定要使用链表,哈哈。