繁体   English   中英

C ++流迭代器与容器迭代器

[英]C++ stream iterators vs container iterators

据我了解,在C ++中,对于容器类型(例如vectordequemap ),我可以使用类似以下语法的迭代器类型

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及其类似特性,对于新的编码器来说,它是否会更加正交且更容易?

我认为这里要注意的重要区别是您要在其上使用迭代器的结构的差异。 您提到的结构vectordequemap都是灵活的,但是它们包含的数据的状态是相对静态的。 另一方面,如果我们将其视为一条stream ,那一条stream是极其流动和不断变化的。

现在,由于流“流动”并在不断变化,因此将流作为数据对象观察时就没有beginend 显然,这种观点不是绝对的,但是我相信这将是设计stream迭代器时遵循的思想。

实际上,流不是矢量。 您可以想象一条河。 一条河流没有“开始”的水,也没有“结束”的水(除非它变干了)。 向量更多是一排相同的对象。 该行已开始和结束。

文件当然具有开始和结束,但这不是流想要抽象您文件的方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM