C++ Primer第五版筆記——特殊的IO庫特性(二)

流隨機訪問

各種流類型通常都支持對流中數據的隨機訪問。可以重定位流,使之跳過一些數據。標準庫中提供了一對函數,來定位(seek)到流中的特定位置,以及告訴(tell)當前位置。
seek和tell是否會做有意義的事依賴於流綁定到哪個設備。在大多數的系統中,綁定到cin、cout、cerr和clog的流不支持隨機訪問。對這些流雖然可以調用seek和tell,但是運行時會報錯。

seek和tell函數
標準庫 實際上定義了兩對seek和tell,一對用於輸入流,另一對用於輸出流,輸入和輸出的區別在於名字的後綴是g(get)還是p(put):
這裏寫圖片描述

只有一個標記
標準庫雖然對兩個版本的的seek和tell進行了區分,但是它在流中只維護單一的標記——不存在獨立的讀標記和寫標記,也就是說在流中同時只存在一個標記。但是在輸入流中調用輸出的版本將會報錯,因此只要在讀寫操作間進行切換時,就必須進行seek操作來重定義標記。

訪問標記
函數tell的兩個版本都返回一個pos_type值,tell函數用來記住一個位置,以便之後在定位回來:

ostringstream s;
s::pos_type mark = s.tellp();	//記住當前位置
//...
if(cancelEntry){
	s.seekp(mark);              //回到tell標記的位置
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章