根据我的理解,在C ++中,对于容器类型(例如vector
,deque
,map
),我可以使用类似
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
及其同类,那么新编码器会不会更正交,更容易?
答案 0 :(得分:0)
我认为这里要注意的重要区别是你尝试使用迭代器的结构的差异。您提到的结构vector
,deque
和map
是灵活的,但其包含数据的状态是相对静态的。另一方面,stream
是非常流畅和不断变化的东西,如果我们将其视为stream
应该是。
现在,因为溪流&#34;流动&#34;并继续更改,当将其作为数据对象进行观察时,流中没有begin
或end
。显然,这种观点并不是绝对的,但我相信这将是设计stream
迭代器时所遵循的思想。
答案 1 :(得分:0)
实际上,流不是矢量。你可以想象一条河。一条河没有“开始”的水,没有“结束”的水(除了它干了)。向量是一排相同的对象。那一行已经开始和结束了。
文件当然有开头和结尾,但这不是流想要抽象文件的方式。