c++ c++迭代器实现 - 创建我自己的迭代器




3 Answers

你应该使用Boost.Iterators。 它包含许多模板和概念来为现有的迭代器实现新的迭代器和适配器。 我写了一篇关于这个话题的文章 ; 它在2008年12月的ACCU杂志中。 它讨论了一个(IMO)针对您的问题的优雅解决方案:使用Boost.Iterators从对象公开成员集合。

如果你只想使用stl, Josuttis的书中有一章是关于实现你自己的STL迭代器的。

c++迭代器指针 iterator详解

我试图学习C ++,所以如果这个问题显示缺乏基本知识,那么请原谅我,你看,事实是,我缺乏基本的知识。

我想了解如何为我创建的类创建迭代器。

我有一个'Shape'类,它有一个Points的容器。 我有一个'Piece'类,它引用了一个Shape并为Shape定义了一个位置。 件没有一个形状,它只是引用一个形状。

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

我希望能够遍历Piece's Points,就像Piece本身就是一个容器一样。 我已经做了一些阅读,没有找到任何帮助我的东西。 我会非常感谢任何指针。




在这里设计一个像Custom Container这样的STL是一篇很好的文章,它解释了一些STL类容器类可以如何与它的迭代器类一起设计的基本概念。 反向迭代器(稍微强硬)虽然留作练习:-)

HTH,




解决问题的办法不是创建自己的迭代器,而是使用现有的STL容器和迭代器。 将每个形状中的点存储在像矢量一样的容器中。

class Shape {
    private:
    vector <Point> points;

你从那时起做什么取决于你的设计。 最好的方法是迭代Shape中的方法中的点。

for (vector <Point>::iterator i = points.begin(); i != points.end(); ++i)
    /* ... */

如果你需要访问Shape之外的点(这可能是一个缺陷设计的标志),你可以在Shape方法中创建,它将返回点的迭代器访问函数(在这种情况下,也为点容器创建一个公共的typedef)。 请看康拉德鲁道夫关于这种方法的详细解答。




Related


Tags

c++   iterator