[英]C++ stream iterators vs container iterators
据我了解,在C ++中,对于容器类型(例如vector
, deque
, map
),我可以使用类似以下语法的迭代器类型
vector<int>::iterator
map<int,int>::const_iterator
并通过类似的方法将实际的迭代器添加到第一个元素
stuff.begin()
但是,对于流(例如ifstream
),界面似乎有些不同; 我可以写一个迭代器
streambuf_iterator<char>(fin)
stream_iterator<int>(fin)
据我了解, ifstream
没有任何方法beginbuf
begin<int>
或beginbuf
这是我最初对vector
期望。
它们有什么不同(技术或历史)的原因吗? 如果istream
迭代器的行为更像vector
及其类似特性,对于新的编码器来说,它是否会更加正交且更容易?
我认为这里要注意的重要区别是您要在其上使用迭代器的结构的差异。 您提到的结构vector
, deque
和map
都是灵活的,但是它们包含的数据的状态是相对静态的。 另一方面,如果我们将其视为一条stream
,那一条stream
是极其流动和不断变化的。
现在,由于流“流动”并在不断变化,因此将流作为数据对象观察时就没有begin
或end
。 显然,这种观点不是绝对的,但是我相信这将是设计stream
迭代器时遵循的思想。
实际上,流不是矢量。 您可以想象一条河。 一条河流没有“开始”的水,也没有“结束”的水(除非它变干了)。 向量更多是一排相同的对象。 该行已开始和结束。
文件当然具有开始和结束,但这不是流想要抽象您文件的方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.