创建我自己的迭代器

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (8)

解决如何为我创建的类创建迭代器:

我有一个类“形状”,它有一个包含点的容器。我有一个类“片段”,它引用一个形状并为该形状定义一个位置。工件没有形状,它只是引用形状。

我希望它看起来像一个容器的点,是相同的形状,它所引用的,但与偏移的块的位置添加。

我想要能够迭代整个片段的点,就像片段本身是一个容器一样。我已经做了一些阅读,但没有发现任何帮助我的东西。

提问于
用户回答回答于

你应该用助推器。它包含了许多模板和概念,用于为现有迭代器实现新的迭代器和适配器。

用户回答回答于

编辑:我知道了,这里实际上需要一个自己的迭代器。尽管如此,我还是让下面的代码站得住脚,因为它在类似的情况下是有用的。

这里真的需要自己的迭代器吗?也许将所有必需的定义转发给保存实际点的容器就足够了:

// Your class `Piece`
class Piece {
private:
    Shape m_shape;

public:

    typedef std::vector<Point>::iterator iterator;
    typedef std::vector<Point>::const_iterator const_iterator;

    iterator begin() { return m_shape.container.begin(); }

    const_iterator begin() const { return m_shape.container.begin(); }

    iterator end() { return m_shape.container.end(); }

    const_iterator end() const { return m_shape.const_container.end(); }
}

这是假设使用的是vector内部,但类型可以很容易地适应。

扫码关注云+社区