Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.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++_Templates_Iterator - Fatal编程技术网

C++ 迭代器循环不计算最后一项

C++ 迭代器循环不计算最后一项,c++,templates,iterator,C++,Templates,Iterator,假设链表是这样定义的: template <typename Object> struct Node{ Object data; Node *prev; Node *next; Node(const Object & d = Object(), Node *p = NULL, Node *n = NULL) : data(d), prev(p),next(n){} }; template <typename Object>

假设链表是这样定义的:

template <typename Object>
struct Node{
    Object data;
    Node *prev;
    Node *next;

    Node(const Object & d = Object(), Node *p = NULL, Node *n = NULL)
    : data(d), prev(p),next(n){}
};

template <typename Object>
class List
{
public:
   iterator begin(){return iterator(head->next);}
   iterator end(){return iterator(tail);}
....
private:
   Node *head=nullptr;
   Node *tail=nullptr;
...
这段代码中有一个问题

for(iterator<Object> itr = list.begin(); itr != list.end(); itr++ )
    std::cout<<(*itr)->name;
for(迭代器itr=list.begin();itr!=list.end();itr++)
std::cout您的“end”迭代器是指向最后一个元素的指针。那是错误的

应该是。

您的“结束”迭代器是指向最后一个元素的指针。那是错误的


应该是。

模板
结构节点
之前?或者什么是
对象
?@mnciitbhu我避免把整个代码放进去。我只是把必要的代码。问题来自列表和迭代器。对象可以是任何类。没关系。
iterator begin(){return iterator(head->next);
看起来有问题(head和tail是否包含有效数据?这些是前哨节点吗?)最后一个成员到底是什么?nullptr还是它前面的一个?@zahmati
tail指向实际的最后一个成员。
所以当然你不会找到最后一个条目,因为这是你编码的。end
迭代器就是尾部,你的循环说“一直走到尾部”。也许重新考虑一下您的设计?
模板
结构节点之前
?或者什么是
对象
?@mnciitbhu我避免了放整个代码。我只放了必要的代码。问题在于列表和迭代器。对象可以是任何类。这不重要。
迭代器开始(){返回迭代器(head->next)
看起来不正确(头部和尾部是否包含有效数据?这些是哨兵节点吗?)最后一个成员到底是什么?nullptr还是它前面的一个?@zahmati
tail指向实际的最后一个成员。
所以当然你不会找到最后一个条目,因为这是你编码的。end迭代器就是尾部,你的循环说“一直走到尾部”.也许重新考虑一下你的设计?那么结尾应该是nullptr吗?那么结尾应该是nullptr吗?
for(iterator<Object> itr = list.begin(); itr != list.end(); itr++ )
    std::cout<<(*itr)->name;