我有一个名为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
对象,在其他示例中,我看到此参数已收到,但事实并非如此。
答案 0 :(得分:0)
如果您的数组是纯数组,则可以增加地址:
Iterator& Iterator::operator++()
{
++address;
return *this;
}
您可以对operator<
使用相同的方法。
如果您的数据结构更复杂,则将Iterator
定义为好友类并将指向MainControl
的指针传递给迭代器确实是个好主意。但是,在这种情况下,这不是必需的。
无关的旁注:使用<
比较迭代器仅对随机访问迭代器有意义(您可以轻松地成为随机访问迭代器,所以很好)。如果只想迭代元素,!=
是一个更好的选择,因为它的假设较少。有关更多详细信息,请参见iterator concepts。