2016-12-01 91 views
2

根据cppreference.com如何编写STL兼容的容器,但其大小未知?

任何符合STL-容器必须提供一个成员函数size()

现在我必须写一个兼容STL-容器MyContainerMyContainer::iterator是一种类型的std::input_iterator,即,MyContainer只能穿过一个通。例如,我使用MyContainer来存储SQL查询的结果,并使用它的iterator逐一记录这些记录。

我遇到了这样一个问题:MyContainer可以提供begin()end()来遍历它的值,但不能预先确定它的值的总大小。

在这种情况下我应该怎么做?

+4

这不是一个容器,在这种情况下,你应该考虑迭代器而不是容器。这应该不是真正的问题,因为大多数标准函数使用迭代器而不是容器。 – Holt

+0

您需要'流'而不是容器。你可以从基于std :: istream的解决方案开始。 – Arunmu

+0

'stream'是面向字符的解决方案,不适合我的问题。我认为。 – xmllmx

回答

2

C++标准中容器“要求”有些混乱。虽然对迭代器的要求是真正的要求(例如,标准算法期望迭代器将具有由需求定义的某些属性),但标准库中没有任何内容依赖于满足“容器要求”的任何容器。实际上,这些要求是关于标准中定义的特定容器的设计陈述,而不是要求不符合它们的要求会破坏代码。

将容器看作是通过一系列值提供迭代器的一种方式。这很重要,但它不是创建有用迭代器的唯一方法。例如,输入流不是容器(通常没有确定其大小的方法),但它们确实提供了可以传递给标准算法的迭代器(形式为istream_iterator)。这没什么错。去做就对了。