我想为列表数据维护一个迭代器,但列表数据中有另一个列表,我也希望保持迭代器。我应该在迭代器中维护一个迭代器吗?这两个迭代器应该分开吗?
// iterator interface
class Iterator
{
public:
boolean hasNext() = 0;
Object getCurrnetItem() = 0;
Object next() = 0;
boolean remove() = 0;
}
// this iterator will iterator the following list
std::vector<MY_SCRUCT> mList;
现在MY_STRUCT中有另一个std :: vector,我也需要迭代器。以下将其表示为示例代码:
struct MY_SCRUCT
{
int numOfObjects;
std::vector<int> data; // i need iterator for this one too!
}
我需要为这两个列表维护迭代器,以便我的应用程序可以随时知道当前所选项目是什么。
我的问题是,如果一个人留在另一个内部以与这个数据结构相对应,这些迭代器应该分开吗?
答案 0 :(得分:0)
我想说保持另一个而不是分开。似乎是良好的编码实践,以保持相关的代码收集。此外,您可以从内部创建迭代器对象的实例,而不是创建新的迭代器对象。这样,当您进行OOP时,迭代器类将具有与结构类相似的结构(使代码更易于管理和清晰)。
答案 1 :(得分:-1)
想要迭代外部类型的所有用户是否也希望迭代内部序列?如果答案不是,那么明确的答案是将它们分开。
即使所有用例都希望迭代这两个维度,问题仍然以不同的形式存在。你是否想要强制所有的迭代必须完全超越这两个维度,这是否有意义?
我个人会避免它。迭代一个维度并得到Object
,对于每个对象,如果用户想要,她也可以迭代内部int
。将正交概念绑定到单个迭代中不会以任何方式帮助您,并且可能会排除某些用例。与此同时,它将使维护更加困难。如果它们是分开的并且您添加了一个额外的子元素,则需要对该新子元素进行迭代,但不需要触及所有不依赖于新特征的现有代码。