实施迭代类别的问题
Problems in implementing an iterator class
我有一个名为 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
指针传递给迭代器确实是一个好主意。但是,在这种情况下,这不是必需的。
无关的侧面注意:使用<
比较迭代器仅对随机访问迭代器有意义(您的可以轻松成为随机访问迭代器,因此很好(。如果您只想迭代元素,则!=
是一个更好的选择,因为它的假设较少。有关更多详细信息,请参见迭代概念。
相关文章:
- ESP8266单片机矢量迭代器的C++问题
- 在C++中迭代 STL 集时出现奇怪的问题<CStudent>
- 使用基于范围的循环迭代矢量时出现问题
- 成员函数中的迭代器出现问题
- 迭代器的指针操作问题
- 为什么在这个C++问题中使用const_iterator而不仅仅是迭代器?
- 如何解决我们必须向前和向后迭代的项链断裂问题
- 在c++中擦除后在映射上迭代时出现的奇怪问题
- std::filesystem::directory_迭代器链接器问题(C++17)
- C++ 迭代后销毁对象的问题
- 面对迭代矢量<矢量<string>>和打印数据的问题
- 使用 find() 通过 std::set 的迭代器将不起作用。出了什么问题?
- 无法取消引用超出范围的向量迭代器 - 有什么问题?
- 调用模板函数的问题"No matching function for call"参数:迭代器、对象函数
- 迭代快速排序方法的分区算法问题
- 迭代器的问题
- 我通过迭代加法将二进制数转换为十进制并检查单个字符(请参阅代码)的方法有什么问题?
- 实施迭代类别的问题
- 无法理解迭代器的问题?
- 将 char* 推送到矢量时出现问题,但在每次迭代后,它会将指向相同值缓冲区的指针添加到矢量中