【发布时间】:2014-09-01 03:05:58
【问题描述】:
据我了解,在 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 及其同类,对于新编码人员来说,这不是更加正交和更容易吗?
【问题讨论】:
-
这主要是历史性的——在迭代器出现之前,iostreams 已经使用了多年。还有一个实际问题:向量在一个类型上实例化,因此它成为迭代器的类型。对于流,您需要直接指定您计划读/写的类型,因为流可以包含任意类型的对象。