1

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

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

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

我的问题再次是,这些迭代器是否应该分开,一个留在另一个内部以对应于该数据结构?

4

2 回答 2

0

我会说把另一个放在里面而不是分开。将相关代码放在一起似乎是一种很好的编码实践。此外,您可以从自身内部创建迭代器对象的实例,而不是创建一个新对象。这样,当您进行 OOP 时,您的迭代器类将具有与您的 struct 类类似的结构(使您的代码更易于管理和易读)。

于 2013-09-18T17:57:32.860 回答
-1

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

即使所有用例都想在这两个维度上进行迭代,问题仍然以不同的形式存在。您是否要强制要求所有迭代都必须完全跨越两个维度,这有意义吗?

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

于 2013-09-18T18:20:30.877 回答