據我瞭解,在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