为分层(嵌套)数据结构实现深度优先迭代器的合理方法是什么?

时间:2016-06-25 21:04:06

标签: c++ c++11 iterator containers

我有一个归结为嵌套容器的数据结构:

struct ComplexContainer {
   struct Item {};
   std::vector<std::vector<std::vector<Item>>> _containerMadness;
}

现在我想实现一个深度优先的前向迭代器。我最初的想法是:

struct const_iterator {
        const_iterator& operator++();
        const IndexedFragment& operator*() const;

private:
    std::vector<std::vector<std::vector<Item>>>::const_iterator _lvl1Iterator;
    std::vector<std::vector<Item>>::const_iterator _lvl2Iterator;
    std::vector<Item>::const_iterator _lvl3Iterator;
};

operator++ 方式实施起来太难了,因为它不能保证比1级容器不为空,在这种情况下lvl 2和lvl 3不是&#39甚至存在。类似地,lvl 2容器可能存在但是是空的。由于std::vector::iterator没有包含用户可访问的容器参考,因此我没有看到一种简单的方法来检查它(没有iterator.valid()或其他一些)。我知道它可以通过所有的理智检查来实现,但我不喜欢它产生的代码 - 无论是结构还是金额。

必须有一个巧妙的方法来做到这一点!

0 个答案:

没有答案