【问题标题】:Sorting a custom linked list with <algorithm> sort使用 <algorithm> 排序自定义链表
【发布时间】:2013-10-16 01:29:30
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    更糟糕的是,当你完成后,它不会很好地工作——std::sort 并不绝对需要随机访问迭代器,但是使用(比如说)双向迭代器,性能通常会相当贫穷。举个例子,std::list 有一个 sort 成员函数来弥补 std::sort 在链表上工作不佳的事实,这已经足够糟糕了。

    基本上,operator+operator- 只是将指针向前或向后推进 N 项。通常你超载operator++ 以提前一个,比如pos = pos -&gt; next;(和operator-- 使用类似pos = pos-&gt;prev; 的东西。然后你可以使用std::advancestd::next 一次推进一个以上的项目(但请注意:对于双向迭代器,它会通过反复调用 ++-- 来实现——这是性能不佳的原因之一。

    【讨论】:

    • 那么,最好还是自己写排序算法吧,哈哈?
    • @RobRob:不幸的是,是的。更好的是:避免使用链接列表,反正它们很少有用。
    • 啊,好吧。老实说,我很乐意,但由于这是一个任务,我必须使用一个链表,哈哈。
    猜你喜欢
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 2012-11-18
    相关资源
    最近更新 更多