C++ 如何为链表实现end()?

C++ 如何为链表实现end()?,c++,iterator,C++,Iterator,我正在为类LinkedList编程学习,但我不知道实现迭代器end()的正确方法是什么。在begin()的情况下,我传递Head,我喜欢Head=Head->next但是end()将指向最后一个过去的元素,因此我不能直接传递Tail并像Tail=Tail->prev那样迭代 1) 为链表实现迭代器end()end函数的正确方法是什么 2) 我应该分配一个内存作为虚拟内存,还是在操作符++和操作符- 3) std::list是如何做到这一点的 谢谢。end()返回的iterrator应该指向数据结

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

1) 为链表实现迭代器end()end函数的正确方法是什么

2) 我应该分配一个内存作为虚拟内存,还是在操作符++和操作符-

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


谢谢。

end()返回的iterrator应该指向数据结构的末尾(就在最后一个有效条目之后)

在您的例子中,它可能应该指向下一个指针的最后一个元素。 例如:

LinkedList_Iterator_End(LinkedList<Type> *list)
{
    this->list  =   list;        //LinkesList<Type> *
    this->node_tmp  =   list->findLast();  //List<Type> *
    this->node = nullptr;
}
LinkedList\u迭代器\u结束(LinkedList*列表)
{
此->列表=列表;//链接列表*
此->节点\u tmp=list->findLast();//列表*
该->节点=nullptr;
}

end()返回的iterrator应该指向数据结构的末尾(就在最后一个有效条目之后)

在您的例子中,它可能应该指向下一个指针的最后一个元素。 例如:

LinkedList_Iterator_End(LinkedList<Type> *list)
{
    this->list  =   list;        //LinkesList<Type> *
    this->node_tmp  =   list->findLast();  //List<Type> *
    this->node = nullptr;
}
LinkedList\u迭代器\u结束(LinkedList*列表)
{
此->列表=列表;//链接列表*
此->节点\u tmp=list->findLast();//列表*
该->节点=nullptr;
}

链表中最后一个元素的下一个指针通常为空。是的,结束迭代器并不意味着取消引用。[cpp ref end迭代器][。这样,您可以检查迭代器是否为end迭代器。我的观点是,您不应该使用最后一个节点的下一个指针,而应该只编写
nullptr
。此外,这样它也可以用于空列表。感谢您的回答,但我如何执行end()--?end()之类的操作应该是LinkedList的成员函数,返回一个结束迭代器。链接列表中最后一个元素的下一个指针通常为空。是的,结束迭代器不应被取消引用。[cpp ref end iterator][。这样,您可以检查迭代器是否是结束迭代器。我的观点是,您不应该使用最后一个节点的下一个指针,而应该只编写
nullptr
。而且,这样,它也可以用于空列表。感谢您的回答,但是我如何执行类似end()-?end()的操作应该是LinkedList的成员函数,返回结束迭代器。