我一直在尋找ostream和istream迭代器,並想知道它們在現實世界中有多少用處。我已經看了幾本書和大量網頁的一切總是能這些流迭代器與真正的文件和二進制數據用於像流迭代器的用法?
ostream_iterator<int> out_it (cout,", ");
copy(myvector.begin(), myvector.end(), out_it);
同樣的例子的變化,並且通常做什麼?
我一直在尋找ostream和istream迭代器,並想知道它們在現實世界中有多少用處。我已經看了幾本書和大量網頁的一切總是能這些流迭代器與真正的文件和二進制數據用於像流迭代器的用法?
ostream_iterator<int> out_it (cout,", ");
copy(myvector.begin(), myvector.end(), out_it);
同樣的例子的變化,並且通常做什麼?
那麼fstream系列從istream/ostream繼承,因此可以完成。
ofstream outFile("myfile");
//..............
ostream_iterator<data> dataIterOut(outFile);
它有多普遍的問題更有趣。根據我的經驗,不是很。引人注目的動機是利用標準算法(或者你自己製作的一些算法)。但是由於你想要讀/寫的結構/類需要擁有所有必要的基礎結構(ctors,流操作符等),我想大多數人不會看到這一點。例如。
data d(...);
*dataIterOut = d; //meh. little work saved, short on clarity
這取決於。除了快速 測試外,我沒有發現它們有用,除了輸入流迭代器不能輕易讀取文件的一部分,並且輸出迭代器附加了終止符,而不是插入分隔符 。但很大程度上取決於;如果你在 的工作環境中有很多文件只是 數字列表,它們可能是合適的;並且存在終止符合適的情況 。
這取決於。如果你是按照Unix風格的過濾器編寫的東西,它們可以很好地工作。否則,它們幾乎沒有用處。
另一個使它們更有用的附加(至少IME)是infix_iterator
,它只在元素之間插入指定的分隔符,而不是在每個元素之後插入。從技術上講,在這一點上你不再使用ostream_iterator
,但它足夠接近,其餘大部分代碼不需要關心差異。