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

时间:2014-09-01 03:05:58

标签: c++ iterator

根据我的理解,在C ++中,对于容器类型(例如vectordequemap),我可以使用类似

的语法获取迭代器类型
vector<int>::iterator
map<int,int>::const_iterator

通过类似

的方法获取第一个元素的实际迭代器
stuff.begin()

然而,对于流(例如ifstream),界面似乎有点不同;我可以通过编写

来获得迭代器
streambuf_iterator<char>(fin)
stream_iterator<int>(fin)

根据我的理解,ifstream没有任何方法begin<int>beginbuf,就像我最初对vector的体验所期望的那样。

他们有什么不同(技术或历史)的原因吗?如果istream迭代器的行为更像vector及其同类,那么新编码器会不会更正交,更容易?

2 个答案:

答案 0 :(得分:0)

我认为这里要注意的重要区别是你尝试使用迭代器的结构的差异。您提到的结构vectordequemap是灵活的,但其包含数据的状态是相对静态的。另一方面,stream是非常流畅和不断变化的东西,如果我们将其视为stream应该是。

现在,因为溪流&#34;流动&#34;并继续更改,当将其作为数据对象进行观察时,流中没有beginend。显然,这种观点并不是绝对的,但我相信这将是设计stream迭代器时所遵循的思想。

答案 1 :(得分:0)

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

文件当然有开头和结尾,但这不是流想要抽象文件的方式。