我有一个归结为嵌套容器的数据结构:
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()
或其他一些)。我知道它可以通过所有的理智检查来实现,但我不喜欢它产生的代码 - 无论是结构还是金额。
必须有一个巧妙的方法来做到这一点!