实施迭代类别的问题

Problems in implementing an iterator class

本文关键字:问题 迭代 施迭代      更新时间:2023-10-16

我有一个名为 MainControl的类,另一个名称 Participant

MainControl的参数之一是一个数组,其中包含来自类Participant的对象的指针。

现在,我需要实现能够正确运行此代码的迭代器(不允许任何更改(:

 MainControl::Iterator i;
 for (i = eurovision.begin(); i<eurovision.end(); ++i)
 cout << *i << endl;

我了解我需要在MainControl类中创建Iterator类。

我定义了Iterator类:

class Iterator {
        Participant* address;
    public:
        Iterator(): address(NULL){
        }
        explicit Iterator(Participant* p_participant) : address(p_participant) {
        }
        bool operator==(const Iterator& i) const;
        bool operator<(const Iterator& i) const;
        Iterator& operator++();
        Participant& operator*();
        const Participant& operator*() const; 
    };

我面临的问题之一是我不确定如何正确地超载<++操作员。

指针对参与者的数组定义为MainControl类中的私有字段,当使用++时,我将需要迭代器指向该数组中的下一个指针。

当我无法在Iterator类的方法中访问此数组时,我无法理解如何做到这一点。

有人可以帮忙吗?预先感谢。

我考虑过在类MainControl中添加:

friend class Iterator;

,但我仍然没有任何参数会指示我正在处理的 MainControl对象,在其他示例中,我看到了此参数,但这里不是这样。

如果您的数组是一个普通的数组,则可以增加地址:

Iterator& Iterator::operator++()
{
    ++address;
    return *this;
}

您可以使用相同的方法对operator<

如果您的数据结构更为复杂,那么将Iterator定义为朋友类并将MainControl指针传递给迭代器确实是一个好主意。但是,在这种情况下,这不是必需的。

无关的侧面注意:使用<比较迭代器仅对随机访问迭代器有意义(您的可以轻松成为随机访问迭代器,因此很好(。如果您只想迭代元素,则!=是一个更好的选择,因为它的假设较少。有关更多详细信息,请参见迭代概念。