在另一个迭代器中是否存在用于分层数据的迭代器?

时间:2013-09-18 17:40:40

标签: c++ design-patterns iterator

我想为列表数据维护一个迭代器,但列表数据中有另一个列表,我也希望保持迭代器。我应该在迭代器中维护一个迭代器吗?这两个迭代器应该分开吗?

// 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!
} 

我需要为这两个列表维护迭代器,以便我的应用程序可以随时知道当前所选项目是什么。

我的问题是,如果一个人留在另一个内部以与这个数据结构相对应,这些迭代器应该分开吗?

2 个答案:

答案 0 :(得分:0)

我想说保持另一个而不是分开。似乎是良好的编码实践,以保持相关的代码收集。此外,您可以从内部创建迭代器对象的实例,而不是创建新的迭代器对象。这样,当您进行OOP时,迭代器类将具有与结构类相似的结构(使代码更易于管理和清晰)。

答案 1 :(得分:-1)

想要迭代外部类型的所有用户是否也希望迭代内部序列?如果答案不是,那么明确的答案是将它们分开。

即使所有用例都希望迭代这两个维度,问题仍然以不同的形式存在。你是否想要强制所有的迭代必须完全超越这两个维度,这是否有意义?

我个人会避免它。迭代一个维度并得到Object,对于每个对象,如果用户想要,她也可以迭代内部int。将正交概念绑定到单个迭代中不会以任何方式帮助您,并且可能会排除某些用例。与此同时,它将使维护更加困难。如果它们是分开的并且您添加了一个额外的子元素,则需要对该新子元素进行迭代,但不需要触及所有不依赖于新特征的现有代码。