空迭代器结束函数?

时间:2017-05-27 23:24:04

标签: c++ iterator

据我所知,迭代器的结束函数应该返回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;
};

1 个答案:

答案 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;
}