0

在实现 Iterator 类时,我遇到了重载 ->() 运算符的问题。这个运算符应该如何重载?

class iterator
{
private:
    pair<Key_t, Val_t> p;

public:
    iterator()
    {

    }

    iterator(const iterator &i)
    {
        p = i.p;
    }

    iterator(Key_t key, Val_t v)
    {
        p = make_pair(key,v);
    }

    pair<const Key_t,Val_t>& operator *() const
    {
        return p;
    }

    iterator& operator = (const iterator &iter)
    {
        this->p = iter;
        return *this;
    }
};

尝试这种方式不成功

&(pair<const Key_t,Val_t>&) operator ->() const
    {
        return &(**this);
    }
4

1 回答 1

0

这整个方法看起来是错误的。

迭代器不应该包含值,它应该至少包含

  • 定位容器内的值所需的信息。
  • 遍历容器内的下一个元素所需的信息。

通过在迭代器中存储值,您会导致不必要的副本并失去更新容器的能力(更改值,从容器中删除元素等)。

例如,类似容器的迭代器std::vector可能存储容器的句柄和当前项的索引(偏移量)。

唯一一次迭代器本身有一个值是当您实现一个实际上不与容器关联的生成器时。

于 2013-05-15T14:41:09.473 回答