据我所知,迭代器的结束函数应该返回null。当我尝试返回nullptr时,程序崩溃了。有人可以解释最终功能应该如何表现吗?
结束()
LinkList::Iterator LinkList::end()
{
return tail->next;
}
更新
这是我的LinkList类。其他两个嵌套在里面。
类
class LinkList
{
public:
class Node
{
public:
Node()
{
next = prev = NULL;
}
Node(int num)
{
data = num; next = prev = NULL;
}
int data;
Node *next;
Node *prev;
};
class Iterator
{
public:
Iterator(Node* ptr);
Iterator operator ++();
int operator *();
bool operator ==(Iterator it);
bool operator !=(Iterator it);
Node *ptr;
};
public:
LinkList();
virtual ~LinkList();
LinkList(const LinkList& other);
LinkList& operator=(LinkList& other);
bool insert(int num);
void insert(const initializer_list<int>& il);
void merge(LinkList & src);
Iterator *it;
Iterator begin();
Iterator end();
int size();
void clear();
private:
Node *head, *tail, *temp;
int count;
};
答案 0 :(得分:4)
迭代器的结束函数可能会也可能不会返回nullptr,这取决于您的实现。例如,STL向量的end()函数&#34;指向&#34;向量的最后一个元素之后的位置。
根据您提供的代码,我无法说出导致您的程序崩溃的原因,但我打赌当您调用end()函数时,&#34; tail&#34;是nullptr。检查是否是这种情况。
修改强>
看到你的课后,我同意你的Iterator :: end()函数应该返回nullptr。在你的实现中你返回tail-&gt; next,实际上应该是nullptr,但如果tail本身是nullptr(即你的列表中没有节点),你的程序将崩溃,因为你试图访问一个成员对象为null。 只是做:
LinkList::Iterator LinkList::end() {
return nullptr;
}