【问题标题】:How to implement end() for linked list?如何为链表实现 end()?
【发布时间】:2020-06-13 10:02:47
【问题描述】:

我正在为 LinkedList 类编程以进行学习但我不知道实现迭代器end() 的正确方法是什么。在 begin() 的情况下,我传递 Head 并且我喜欢 Head = Head->next;end() 将指向一个过去的元素,所以我不能直接传递 Tail 并像 Tail = Tail->prev 一样迭代。

1)链表迭代器end()结束函数的正确实现方式是什么。

2)我应该将内存分配为 dummy 还是在 operator ++ 和 operator-- 中做一些条件?

3)std::list 如何做到这一点?

谢谢。

【问题讨论】:

    标签: c++ iterator


    【解决方案1】:

    end() 返回的迭代器应该指向数据结构的末尾(就在最后一个有效条目之后)。 c++ Reference

    在您的情况下,它可能应该指向最后一个元素的 next 指针。 比如:

    LinkedList_Iterator_End(LinkedList<Type> *list)
    {
        this->list  =   list;        //LinkesList<Type> *
        this->node_tmp  =   list->findLast();  //List<Type> *
        this->node = nullptr;
    }
    

    【讨论】:

    • 链表中最后一个元素的next指针通常为空。
    • 是的,结束迭代器并不意味着被取消引用。 [cpp 引用结束迭代器][en.cppreference.com/w/cpp/iterator/end].这样你就可以检查一个迭代器是否是一个结束迭代器。
    • 我的意思是,你应该写nullptr,而不是取最后一个节点的下一个指针。此外,这样它也适用于空列表。
    • 感谢您的回答但是我该如何进行 end()-- 之类的操作?
    • end() 应该是 LinkedList 的成员函数,返回一个结束迭代器。
    猜你喜欢
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 2012-05-10
    • 1970-01-01
    • 2013-11-26
    相关资源
    最近更新 更多