据我了解,在C++中,集装箱类型(例如vector
,deque
,map
),我可以使用语法迭代器型像C++流迭代器VS容器迭代器
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已经使用了好几年了。还有一个实际问题:一个矢量是通过一个类型实例化的,所以它成为迭代器的类型。对于流,您需要直接指定您的计划的读/写类型,因为流可以保存任意类型的对象。 – 2014-09-01 03:14:29