2011-06-14 38 views
3

我想实现一个类,将允许我迭代对象的STL样式,而不显式存储在容器中。C++类与迭代器,但没有容器

这个简单的例子是,一个<Paragraph>::iterator类实际上没有一个容器的段落,而是有一个<string> text变量。创建一个实际上逐行扫描文本并组合段落的成员函数是很容易的,但对于我来说,将所有这些文本再次存储在某个容器中似乎很愚蠢,以至于我可以从它的迭代器继承。

另外,我称之为<Paragraph>::iterator而不是<string>::iterator的原因是因为我可能想要一个不同类型的迭代器。例如,我可以计算每个段落中的字符数,并且有一个<int>::iterator

我想我的问题是这样的:在没有容器的情况下用迭代器来思考是否合适?

谢谢

回答

4

是的,迭代器的概念完全独立于容器的概念。

例如,标准库有一组流迭代器。任何可以迭代的东西都应该用C++中的迭代器表示,无论是否存在底层的内存容器。

0

听起来对我来说,就像你正在将一个Paragraph对象当作paragrahs的容器。但Paragraph不会成为Paragraph的容器的一部分吗?并且每个Paragraph都是一个字(或字符串,取决于您的需要)的容器?所以你可以在Paragraph对象中使用std::string迭代器,并使用std容器来保存Paragraph

你仍然可以创建一个自定义迭代器来遍历你想要的任何东西,然而你想要,the answer to this question给出了如何构造你的迭代器类的一个很好的概述。

6

是适当考虑在迭代器而言,当没有容器?

它不仅是适当的,它是思维的优越方式:类应该有瘦的接口 - 也就是说,他们应该只会暴露他们需要揭露,仅此而已。内部处理段落的方式(无论是将它们存储在容器中,如果存储在容器中)是实现细节,并且不属于类的接口。

该类应该在任何情况下只暴露段落的迭代器范围。一旦你在界面层上摆脱了容器,你可能就没有理由在课堂中拥有一个容器了,正如你已经注意到的那样。