带有LinkedList的迭代器类?

时间:2017-02-02 17:51:16

标签: c++ iterator

我还是C ++的新手,我觉得这个错误肯定是我错过的。

List<int>::iterator it1, it2;

这一行

template <typename Object>
class List
{
private:
    // The basic doubly linked List node.
    // Nested inside of List, can be public
    // because the Node is itself private
    class Node
    {
        Object  _data;
        Node   *_prev;
        Node   *_next;

        Node(const Object & d = Object(), Node * p = NULL, Node * n = NULL)
            : _data(d), _prev(p), _next(n) { }
    };

public:




public:
    List()
    {
        init();
    }

    ~List()
    {
        clear();
        delete _head;
        delete _tail;
    }

    List(const List & rhs)
    {
        init();
        *this = rhs;
    }

    const List & operator= (const List & rhs)
    {
        if (this == &rhs)
            return *this;
        clear();
        for (const_iterator itr = rhs.begin(); itr != rhs.end(); ++itr)
            push_back(*itr);
        return *this;
    }

    // Return iterator representing beginning of List.
    // Mutator version is first, then accessor version.
    iterator begin()
    {
        return iterator(_head->_next);
    }

    const_iterator begin() const
    {
        return const_iterator(_head->_next);
    }

    // Return iterator representing endmarker of List.
    // Mutator version is first, then accessor version.
    iterator end()
    {
        return iterator(_tail);
    }

    const_iterator end() const
    {
        return const_iterator(_tail);
    }

    // Return number of elements currently in the List.
    int size() const
    {
        return _size;
    }

    // Return true if the List is empty, false otherwise.
    bool empty() const
    {
        return size() == 0;
    }

    void clear()
    {
        while (!empty())
            pop_front();
    }

    // front, back, push_front, push_back, pop_front, and pop_back
    // are the basic double-ended queue operations.
    Object & front()
    {
        return *begin();
    }

    const Object & front() const
    {
        return *begin();
    }

    Object & back()
    {
        return *--end();
    }

    const Object & back() const
    {
        return *--end();
    }

    void push_front(const Object & x)
    {
        insert(begin(), x);
    }

    void push_back(const Object & x)
    {
        insert(end(), x);
    }

    void pop_front()
    {
        erase(begin());
    }

    void pop_back()
    {
        erase(--end());
    }

    // Insert x before itr.
    iterator insert(iterator itr, const Object & x)
    {
        Node *p = itr.current;
        _size++;
        return iterator(p->_prev = p->_prev->_next = new Node(x, p->_prev, p));
    }

    // Erase item at itr.
    iterator erase(iterator itr)
    {
        Node *p = itr.current;
        iterator retVal(p->_next);
        p->_prev->_next = p->_next;
        p->_next->_prev = p->_prev;
        delete p;
        _size--;

        return retVal;
    }

    iterator erase(iterator start, iterator end)
    {
        for (iterator itr = start; itr != end; )
            itr = erase(itr);

        return end;
    }

private:
    int   _size;
    Node *_head;
    Node *_tail;

    void init()
    {
        _size = 0;
        _head = new Node;
        _tail = new Node;
        _head->_next = _tail;
        _tail->_prev = _head;
    }
};

给出消息“List has no member iterator”

这是List Class

c.execute("UPDATE T SET T12M = {} WHERE date = {}".format(var2, text))

我假设这个错误可能是因为没有Iterator类?

1 个答案:

答案 0 :(得分:2)

  

我假设这个错误可能是因为没有Iterator类?

是的,您的代码假设List<T>还提供了嵌套的List<T>::iterator类。

您的代码中缺少的内容。