任何符合STL标准的容器都必须提供成员函数
size()
。
现在我必须编写符合STL的容器MyContainer
,MyContainer::iterator
是std::input_iterator
的类型,即MyContainer
只能遍历一次。例如,我使用MyContainer
来存储SQL查询的结果,并使用其iterator
逐个记录这些记录。
我遇到了这样的问题:MyContainer
可以提供begin()
和end()
来遍历其值,但无法预先确定其值的总大小。
在这种情况下我该怎么做?
答案 0 :(得分:2)
C ++标准中的容器“要求”存在一些混淆。虽然对迭代器的要求是真正的要求(例如,标准算法期望迭代器具有由要求定义的某些属性),但标准库中没有任何东西依赖于满足“容器要求”的任何容器。事实上,这些要求是关于标准中定义的特定容器的设计陈述,而不是满足它们的意义上的要求将破坏代码。
将容器视为一种在一系列值上提供迭代器的方法。这很重要,但它不是创建有用迭代器的唯一方法。例如,输入流不是容器(通常没有确定其大小的方法),但它们确实提供了可以传递给标准算法的迭代器(以1 1 5
的形式)。这没什么不对。就这么做。