如何编写符合STL标准的容器但其大小未知?

时间:2016-12-01 10:07:18

标签: c++ stl standards

根据cppreference.com

  

任何符合STL标准的容器都必须提供成员函数size()

现在我必须编写符合STL的容器MyContainerMyContainer::iteratorstd::input_iterator的类型,即MyContainer只能遍历一次。例如,我使用MyContainer来存储SQL查询的结果,并使用其iterator逐个记录这些记录。

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

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

1 个答案:

答案 0 :(得分:2)

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

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