实施迭代器类的问题

时间:2019-06-23 23:04:45

标签: c++ iterator

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

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

现在,我需要实现一个迭代器,该迭代器将能够正确运行此代码(不允许进行任何更改):

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

据此我了解到我需要在Iterator类中创建一个MainControl类。

我这样定义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中定义为私有字段,使用++时,我将需要迭代器指向该数组中的下一个指针。 / p>

Iterator类的方法中无法访问此数组时,我不明白该怎么办。

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

我考虑过要添加类MainControl

friend class Iterator;

但是我仍然没有任何参数可以表明我正在处理哪个MainControl对象,在其他示例中,我看到此参数已收到,但事实并非如此。

1 个答案:

答案 0 :(得分:0)

如果您的数组是纯数组,则可以增加地址:

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

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

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

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