C++ 如何编写STL兼容容器,但其大小未知?

C++ 如何编写STL兼容容器,但其大小未知?,c++,stl,standards,C++,Stl,Standards,根据: 任何符合STL的容器都必须提供成员函数size() 现在我必须编写一个符合STL的容器MyContainer,MyContainer::iterator是一种std::input\u iterator,也就是说,MyContainer只能遍历一次。例如,我使用MyContainer存储SQL查询的结果,并使用其迭代器逐个记录 我面临这样一个问题:MyContainer可以提供begin()和end()遍历其值,但无法预先确定其值的总大小 在这种情况下,我应该怎么办? < P> C++中的

根据:

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

现在我必须编写一个符合STL的容器
MyContainer
MyContainer::iterator
是一种
std::input\u iterator
,也就是说,
MyContainer
只能遍历一次。例如,我使用
MyContainer
存储SQL查询的结果,并使用其
迭代器
逐个记录

我面临这样一个问题:
MyContainer
可以提供
begin()
end()
遍历其值,但无法预先确定其值的总大小


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

< P> C++中的容器“要求”中有一点混乱。虽然对迭代器的需求是真实的需求(例如,标准算法期望迭代器具有由需求定义的某些属性),但标准库中没有任何内容依赖于满足“容器需求”的任何容器。事实上,这些要求是关于标准中定义的特定容器的设计声明,而不是不满足这些要求会破坏代码的要求


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

这不是一个容器,在这种情况下,您应该考虑迭代器而不是容器。这应该不是什么问题,因为大多数标准函数都使用迭代器而不是容器。您需要的是
而不是容器。您可以从基于
std::istream
的解决方案开始。
stream
是面向字符的解决方案,它不适合我的问题。我想。@xmllmx实际上为什么你想要一个标准兼容的容器来处理这种东西?@Holt,如果可能的话,STL兼容总是更好的,我想。